Built with Alectryon, running Coq+SerAPI v8.15.0+0.15.0. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
F Sfix = Sfix
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
MonotonicFunction F
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F
F Sfix = Sfix
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
MonotonicFunction F
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
MonotonicFunction (Fassoc ρ (svar_open 0 X ϕ) X)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
MonotonicFunction
(λS : propset M,
eval (update_svar_val X S ρ) (svar_open 0 X ϕ))
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
well_formed_positive (mu , ϕ)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
svar_is_fresh_in X ϕ
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
svar_is_fresh_in X ϕ
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
svar_is_fresh_in (fresh_svar ϕ) ϕ
apply set_svar_fresh_is_fresh.
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F
F Sfix = Sfix
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F
isFixpoint F (LeastFixpointOf F)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F Ffix: isFixpoint F (LeastFixpointOf F)
F Sfix = Sfix
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F
isFixpoint F (LeastFixpointOf F)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F
MonotonicFunction F
apply HFmono.
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F Ffix: isFixpoint F (LeastFixpointOf F)
F Sfix = Sfix
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F Ffix: F (LeastFixpointOf F) = LeastFixpointOf F
F Sfix = Sfix
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F Ffix: F (LeastFixpointOf F) = LeastFixpointOf F HeqSfix: Sfix =
(letX := fresh_svar ϕ in
LeastFixpointOf
(λS : propset M,
letρ' := update_svar_val X S ρ ineval ρ' (svar_open 0 X ϕ)))
F Sfix = Sfix
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F Ffix: F (LeastFixpointOf F) = LeastFixpointOf F HeqSfix: Sfix =
LeastFixpointOf
(λS : propset M,
eval
(update_svar_val (fresh_svar ϕ) S ρ)
(svar_open 0 (fresh_svar ϕ) ϕ))
F Sfix = Sfix
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F =
(λS : propset M,
eval (update_svar_val X S ρ)
(svar_open 0 X ϕ)) Sfix: propset M OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F Ffix: F (LeastFixpointOf F) = LeastFixpointOf F HeqSfix: Sfix =
LeastFixpointOf
(λS : propset M,
eval
(update_svar_val (fresh_svar ϕ) S ρ)
(svar_open 0 (fresh_svar ϕ) ϕ))
F Sfix = Sfix
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M Sfix: propset M OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F Ffix: F (LeastFixpointOf F) = LeastFixpointOf F HeqSfix: Sfix =
LeastFixpointOf
(λS : propset M,
eval
(update_svar_val (fresh_svar ϕ) S ρ)
(svar_open 0 (fresh_svar ϕ) ϕ)) HeqF: F =
(λS : propset M,
eval (update_svar_val (fresh_svar ϕ) S ρ)
(svar_open 0 (fresh_svar ϕ) ϕ))
F Sfix = Sfix
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M Sfix: propset M OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F Ffix: F (LeastFixpointOf F) = LeastFixpointOf F HeqF: F =
(λS : propset M,
eval (update_svar_val (fresh_svar ϕ) S ρ)
(svar_open 0 (fresh_svar ϕ) ϕ)) HeqSfix: Sfix = LeastFixpointOf F
F Sfix = Sfix
Σ: Signature M: Model ρ: Valuation ϕ: Pattern X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M Sfix: propset M OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F HeqF: F =
(λS : propset M,
eval (update_svar_val (fresh_svar ϕ) S ρ)
(svar_open 0 (fresh_svar ϕ) ϕ)) HeqSfix: Sfix = LeastFixpointOf F Ffix: F Sfix = Sfix
F Sfix = Sfix
apply Ffix.Qed.
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M
well_formed_positive (mu , ϕ)
→ letX := fresh_svar ϕ inletF := Fassoc ρ (svar_open 0 X ϕ) X inletSfix := eval ρ (mu , ϕ) in F S ⊆ S → Sfix ⊆ S
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M
well_formed_positive (mu , ϕ)
→ letX := fresh_svar ϕ inletF := Fassoc ρ (svar_open 0 X ϕ) X inletSfix := eval ρ (mu , ϕ) in F S ⊆ S → Sfix ⊆ S
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M
no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
→ Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ)
(fresh_svar ϕ) S ⊆ S → eval ρ (mu , ϕ) ⊆ S
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ
no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
→ Fassoc ρ (svar_open 0 X ϕ) X S ⊆ S
→ eval ρ (mu , ϕ) ⊆ S
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ → F S ⊆ S → eval ρ (mu , ϕ) ⊆ S
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ)
no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ → F S ⊆ S → Sfix ⊆ S
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M)
no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ → F S ⊆ S → Sfix ⊆ S
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M)
no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ → F S ⊆ S → Sfix ⊆ S
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
F S ⊆ S → Sfix ⊆ S
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
MonotonicFunction F
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F
F S ⊆ S → Sfix ⊆ S
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
MonotonicFunction F
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
MonotonicFunction (Fassoc ρ (svar_open 0 X ϕ) X)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
MonotonicFunction
(λS : propset M,
eval (update_svar_val X S ρ) (svar_open 0 X ϕ))
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
well_formed_positive (mu , ϕ)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
svar_is_fresh_in X ϕ
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
svar_is_fresh_in X ϕ
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ
svar_is_fresh_in (fresh_svar ϕ) ϕ
apply set_svar_fresh_is_fresh.
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F
F S ⊆ S → Sfix ⊆ S
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F
LeastFixpointOf F = Sfix
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F Hlfp: LeastFixpointOf F = Sfix
F S ⊆ S → Sfix ⊆ S
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F
LeastFixpointOf
(λS : propset M,
eval (update_svar_val (fresh_svar ϕ) S ρ)
(svar_open 0 (fresh_svar ϕ) ϕ)) =
LeastFixpointOf
(λS : propset M,
eval (update_svar_val (fresh_svar ϕ) S ρ)
(svar_open 0 (fresh_svar ϕ) ϕ))
reflexivity.
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F Hlfp: LeastFixpointOf F = Sfix
F S ⊆ S → Sfix ⊆ S
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F Hlfp: LeastFixpointOf F = Sfix Hincl: F S ⊆ S
Sfix ⊆ S
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F Hlfp: LeastFixpointOf F = Sfix Hincl: F S ⊆ S Hleast: leq (F S) S → leq (LeastFixpointOf F) S
Sfix ⊆ S
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F Hlfp: LeastFixpointOf F = Sfix Hincl: F S ⊆ S Hleast: F S ⊆ S → LeastFixpointOf F ⊆ S
Sfix ⊆ S
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F Hlfp: LeastFixpointOf F = Sfix Hincl: F S ⊆ S Hleast: LeastFixpointOf F ⊆ S
Sfix ⊆ S
Σ: Signature M: Model ρ: Valuation ϕ: Pattern S: propset M X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix: propset M HeqSfix: Sfix = eval ρ (mu , ϕ) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 ϕ &&
well_formed_positive ϕ HFmono: MonotonicFunction F Hlfp: LeastFixpointOf F = Sfix Hincl: F S ⊆ S Hleast: Sfix ⊆ S
Sfix ⊆ S
apply Hleast.Qed.
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M
well_formed_positive (mu , ϕ)
→ letX := fresh_svar ϕ inletF := Fassoc ρ (svar_open 0 X ϕ) X in
F Sfix ⊆ Sfix
→ (∀S : propset M, F S ⊆ S → Sfix ⊆ S)
→ Sfix = eval ρ (mu , ϕ)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M
well_formed_positive (mu , ϕ)
→ letX := fresh_svar ϕ inletF := Fassoc ρ (svar_open 0 X ϕ) X in
F Sfix ⊆ Sfix
→ (∀S : propset M, F S ⊆ S → Sfix ⊆ S)
→ Sfix = eval ρ (mu , ϕ)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ)
letX := fresh_svar ϕ inletF := Fassoc ρ (svar_open 0 X ϕ) X in
F Sfix ⊆ Sfix
→ (∀S : propset M, F S ⊆ S → Sfix ⊆ S)
→ Sfix = eval ρ (mu , ϕ)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ
Fassoc ρ (svar_open 0 X ϕ) X Sfix ⊆ Sfix
→ (∀S : propset M,
Fassoc ρ (svar_open 0 X ϕ) X S ⊆ S → Sfix ⊆ S)
→ Sfix = eval ρ (mu , ϕ)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
F Sfix ⊆ Sfix
→ (∀S : propset M, F S ⊆ S → Sfix ⊆ S)
→ Sfix = eval ρ (mu , ϕ)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Hprefix: F Sfix ⊆ Sfix Hleast: ∀S : propset M, F S ⊆ S → Sfix ⊆ S
Sfix = eval ρ (mu , ϕ)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Hprefix: F Sfix ⊆ Sfix Hleast: ∀S : propset M, F S ⊆ S → Sfix ⊆ S
Sfix =
(letX := fresh_svar ϕ in
LeastFixpointOf
(λS : propset M,
letρ' := update_svar_val X S ρ ineval ρ' (svar_open 0 X ϕ)))
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Hprefix: F Sfix ⊆ Sfix Hleast: ∀S : propset M, F S ⊆ S → Sfix ⊆ S
Sfix =
LeastFixpointOf
(λS : propset M,
eval (update_svar_val (fresh_svar ϕ) S ρ)
(svar_open 0 (fresh_svar ϕ) ϕ))
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F =
(λS : propset M,
eval (update_svar_val X S ρ)
(svar_open 0 X ϕ)) Hprefix: F Sfix ⊆ Sfix Hleast: ∀S : propset M, F S ⊆ S → Sfix ⊆ S
Sfix =
LeastFixpointOf
(λS : propset M,
eval (update_svar_val (fresh_svar ϕ) S ρ)
(svar_open 0 (fresh_svar ϕ) ϕ))
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M Hprefix: F Sfix ⊆ Sfix Hleast: ∀S : propset M, F S ⊆ S → Sfix ⊆ S HeqF: F =
(λS : propset M,
eval (update_svar_val (fresh_svar ϕ) S ρ)
(svar_open 0 (fresh_svar ϕ) ϕ))
Sfix =
LeastFixpointOf
(λS : propset M,
eval (update_svar_val (fresh_svar ϕ) S ρ)
(svar_open 0 (fresh_svar ϕ) ϕ))
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M Hprefix: F Sfix ⊆ Sfix Hleast: ∀S : propset M, F S ⊆ S → Sfix ⊆ S HeqF: F =
(λS : propset M,
eval (update_svar_val (fresh_svar ϕ) S ρ)
(svar_open 0 (fresh_svar ϕ) ϕ))
Sfix = LeastFixpointOf F
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M Hprefix: F Sfix ⊆ Sfix Hleast: ∀S : propset M, F S ⊆ S → Sfix ⊆ S HeqF: F =
(λS : propset M,
eval (update_svar_val (fresh_svar ϕ) S ρ)
(svar_open 0 (fresh_svar ϕ) ϕ))
leq (F Sfix) Sfix
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M Hprefix: F Sfix ⊆ Sfix Hleast: ∀S : propset M, F S ⊆ S → Sfix ⊆ S HeqF: F =
(λS : propset M,
eval (update_svar_val (fresh_svar ϕ) S ρ)
(svar_open 0 (fresh_svar ϕ) ϕ))
∀x : propset M, leq (F x) x → leq Sfix x
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M Hprefix: F Sfix ⊆ Sfix Hleast: ∀S : propset M, F S ⊆ S → Sfix ⊆ S HeqF: F =
(λS : propset M,
eval (update_svar_val (fresh_svar ϕ) S ρ)
(svar_open 0 (fresh_svar ϕ) ϕ))
leq (F Sfix) Sfix
apply Hprefix.
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M Hprefix: F Sfix ⊆ Sfix Hleast: ∀S : propset M, F S ⊆ S → Sfix ⊆ S HeqF: F =
(λS : propset M,
eval (update_svar_val (fresh_svar ϕ) S ρ)
(svar_open 0 (fresh_svar ϕ) ϕ))
∀x : propset M, leq (F x) x → leq Sfix x
apply Hleast.Qed.
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M
well_formed_positive (mu , ϕ)
→ letX := fresh_svar ϕ inletF := Fassoc ρ (svar_open 0 X ϕ) X in
F Sfix ⊆ Sfix
∧ (∀S : propset M, F S ⊆ S → Sfix ⊆ S)
↔ Sfix = eval ρ (mu , ϕ)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M
well_formed_positive (mu , ϕ)
→ letX := fresh_svar ϕ inletF := Fassoc ρ (svar_open 0 X ϕ) X in
F Sfix ⊆ Sfix
∧ (∀S : propset M, F S ⊆ S → Sfix ⊆ S)
↔ Sfix = eval ρ (mu , ϕ)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ)
letX := fresh_svar ϕ inletF := Fassoc ρ (svar_open 0 X ϕ) X in
F Sfix ⊆ Sfix ∧ (∀S : propset M, F S ⊆ S → Sfix ⊆ S)
↔ Sfix = eval ρ (mu , ϕ)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ
Fassoc ρ (svar_open 0 X ϕ) X Sfix ⊆ Sfix
∧ (∀S : propset M,
Fassoc ρ (svar_open 0 X ϕ) X S ⊆ S → Sfix ⊆ S)
↔ Sfix = eval ρ (mu , ϕ)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X
F Sfix ⊆ Sfix ∧ (∀S : propset M, F S ⊆ S → Sfix ⊆ S)
↔ Sfix = eval ρ (mu , ϕ)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix': propset M HeqSfix': Sfix' = eval ρ (mu , ϕ)
F Sfix ⊆ Sfix ∧ (∀S : propset M, F S ⊆ S → Sfix ⊆ S)
↔ Sfix = Sfix'
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix': propset M HeqSfix': Sfix' = eval ρ (mu , ϕ)
F Sfix ⊆ Sfix ∧ (∀S : propset M, F S ⊆ S → Sfix ⊆ S)
→ Sfix = Sfix'
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix': propset M HeqSfix': Sfix' = eval ρ (mu , ϕ)
Sfix = Sfix'
→ F Sfix ⊆ Sfix
∧ (∀S : propset M, F S ⊆ S → Sfix ⊆ S)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix': propset M HeqSfix': Sfix' = eval ρ (mu , ϕ)
F Sfix ⊆ Sfix ∧ (∀S : propset M, F S ⊆ S → Sfix ⊆ S)
→ Sfix = Sfix'
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix': propset M HeqSfix': Sfix' = eval ρ (mu , ϕ) H1: F Sfix ⊆ Sfix H2: ∀S : propset M, F S ⊆ S → Sfix ⊆ S
Sfix = Sfix'
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) H2: ∀S : propset M,
Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ)
(fresh_svar ϕ) S ⊆ S →
Sfix ⊆ S H1: Fassoc ρ (svar_open 0 (fresh_svar ϕ) ϕ)
(fresh_svar ϕ) Sfix ⊆ Sfix
Sfix = eval ρ (mu , ϕ)
auto using eval_mu_if_lfp.
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix': propset M HeqSfix': Sfix' = eval ρ (mu , ϕ)
Sfix = Sfix'
→ F Sfix ⊆ Sfix
∧ (∀S : propset M, F S ⊆ S → Sfix ⊆ S)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix': propset M HeqSfix': Sfix' = eval ρ (mu , ϕ) H: Sfix = Sfix'
F Sfix ⊆ Sfix ∧ (∀S : propset M, F S ⊆ S → Sfix ⊆ S)
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix': propset M HeqSfix': Sfix' = eval ρ (mu , ϕ) H: Sfix = Sfix'
F Sfix ⊆ Sfix
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix': propset M HeqSfix': Sfix' = eval ρ (mu , ϕ) H: Sfix = Sfix'
∀S : propset M, F S ⊆ S → Sfix ⊆ S
Σ: Signature M: Model ρ: Valuation ϕ: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , ϕ) X: svar HeqX: X = fresh_svar ϕ F: propset M → propset M HeqF: F = Fassoc ρ (svar_open 0 X ϕ) X Sfix': propset M HeqSfix': Sfix' = eval ρ (mu , ϕ) H: Sfix = Sfix'
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step
[&& (if decide (0 < 0)
then no_negative_occurrence_db_b 0 base
elseif decide (0 < 0 + 1)
then true
else no_negative_occurrence_db_b (0 - 1) base) &&
true,
if decide (0 < 0)
then no_negative_occurrence_db_b 0 step
elseif decide (0 < 0 + 1)
then true
else no_negative_occurrence_db_b (0 - 1) step
& true]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step
true
auto.Qed.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation X: svar
svar_is_fresh_in X patt_ind_gen_body
→ eval ρ (svar_open 0 X patt_ind_gen_body) =
eval ρ (base or step $ patt_free_svar X)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation X: svar
svar_is_fresh_in X patt_ind_gen_body
→ eval ρ (svar_open 0 X patt_ind_gen_body) =
eval ρ (base or step $ patt_free_svar X)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation X: svar Hfr: svar_is_fresh_in X patt_ind_gen_body
eval ρ (svar_open 0 X patt_ind_gen_body) =
eval ρ (base or step $ patt_free_svar X)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation X: svar Hfr: X ∉ free_svars patt_ind_gen_body
eval ρ (svar_open 0 X patt_ind_gen_body) =
eval ρ (base or step $ patt_free_svar X)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation X: svar Hfr: X
∉ free_svars (nest_mu base) ∪ ∅
∪ (free_svars (nest_mu step) ∪ ∅)
eval ρ (svar_open 0 X patt_ind_gen_body) =
eval ρ (base or step $ patt_free_svar X)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation X: svar Hfr: X ∉ free_svars base ∪ free_svars step
eval ρ (svar_open 0 X patt_ind_gen_body) =
eval ρ (base or step $ patt_free_svar X)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation X: svar Hfr: (X ∉ free_svars base) ∧ X ∉ free_svars step
eval ρ (svar_open 0 X patt_ind_gen_body) =
eval ρ (base or step $ patt_free_svar X)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation X: svar Hfr1: X ∉ free_svars base Hfr2: X ∉ free_svars step
eval ρ (svar_open 0 X patt_ind_gen_body) =
eval ρ (base or step $ patt_free_svar X)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation X: svar Hfr1: X ∉ free_svars base Hfr2: X ∉ free_svars step
eval ρ
(svar_open 0 X
(nest_mu base or nest_mu step $ BoundVarSugar.B0)) =
eval ρ (base or step $ patt_free_svar X)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation X: svar Hfr1: X ∉ free_svars base Hfr2: X ∉ free_svars step
eval ρ
(bsvar_subst
(nest_mu base or nest_mu step $ BoundVarSugar.B0)
(patt_free_svar X) 0) =
eval ρ (base or step $ patt_free_svar X)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation X: svar Hfr1: X ∉ free_svars base Hfr2: X ∉ free_svars step
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation X: svar Hfr1: X ∉ free_svars base Hfr2: X ∉ free_svars step
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation X: svar Hfr1: X ∉ free_svars base Hfr2: X ∉ free_svars step
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation X: svar Hfr1: X ∉ free_svars base Hfr2: X ∉ free_svars step
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation X: svar Hfr1: X ∉ free_svars base Hfr2: X ∉ free_svars step
reflexivity.Qed.Sectionwith_eval.Context (M : @Model Σ).Context (ρ : @Valuation Σ M).LetF := letX := fresh_svar patt_ind_gen_body in
@Fassoc Σ M ρ (svar_open 0 X patt_ind_gen_body) X.(* Lemma svar_open_patt_ind_gen_body_assoc S: let X := fresh_svar patt_ind_gen_body in eval ρₑ (update_svar_val X S ρₛ) (svar_open 0 X patt_ind_gen_body) = F S. Proof. reflexivity. (* cbv zeta. rewrite svar_open_patt_ind_gen_body_simpl. { apply set_svar_fresh_is_fresh. } subst F. unfold Fassoc. rewrite svar_open_patt_ind_gen_body_simpl. { apply set_svar_fresh_is_fresh. } reflexivity.*) Qed. *)(* I can imagine this lemma to be proven automatically. *)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
F =
(λA : propset M,
eval ρ base ∪ app_ext (eval ρ step) A)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
F =
(λA : propset M,
eval ρ base ∪ app_ext (eval ρ step) A)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Fassoc ρ
(svar_open 0 (fresh_svar patt_ind_gen_body)
patt_ind_gen_body) (fresh_svar patt_ind_gen_body) =
(λA : propset M,
eval ρ base ∪ app_ext (eval ρ step) A)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
(λS : propset M,
eval
(update_svar_val (fresh_svar patt_ind_gen_body) S
ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
patt_ind_gen_body)) =
(λA : propset M,
eval ρ base ∪ app_ext (eval ρ step) A)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
∀x : propset M,
eval
(update_svar_val (fresh_svar patt_ind_gen_body) x
ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
patt_ind_gen_body) =
eval ρ base ∪ app_ext (eval ρ step) x
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
eval
(update_svar_val (fresh_svar patt_ind_gen_body) A ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
patt_ind_gen_body) =
eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
eval
(update_svar_val (fresh_svar patt_ind_gen_body) A ρ)
(base
or step $
patt_free_svar (fresh_svar patt_ind_gen_body)) =
eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
eval
(update_svar_val (fresh_svar patt_ind_gen_body) A ρ)
(base
or step $
patt_free_svar (fresh_svar patt_ind_gen_body)) =
eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
eval
(update_svar_val (fresh_svar patt_ind_gen_body) A ρ)
base
∪ eval
(update_svar_val (fresh_svar patt_ind_gen_body) A
ρ)
(step $
patt_free_svar (fresh_svar patt_ind_gen_body)) =
eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
eval
(update_svar_val (fresh_svar patt_ind_gen_body) A ρ)
base
∪ app_ext
(eval
(update_svar_val (fresh_svar patt_ind_gen_body)
A ρ) step)
(eval
(update_svar_val (fresh_svar patt_ind_gen_body)
A ρ)
(patt_free_svar (fresh_svar patt_ind_gen_body))) =
eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
eval
(update_svar_val (fresh_svar patt_ind_gen_body) A ρ)
base
∪ app_ext
(eval
(update_svar_val (fresh_svar patt_ind_gen_body)
A ρ) step)
(svar_valuation
(update_svar_val (fresh_svar patt_ind_gen_body)
A ρ) (fresh_svar patt_ind_gen_body)) =
eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
eval
(update_svar_val (fresh_svar patt_ind_gen_body) A ρ)
base
∪ app_ext
(eval
(update_svar_val (fresh_svar patt_ind_gen_body)
A ρ) step) A =
eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
svar_is_fresh_in (fresh_svar patt_ind_gen_body) base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
eval ρ base
∪ app_ext
(eval
(update_svar_val (fresh_svar patt_ind_gen_body)
A ρ) step) A =
eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
svar_is_fresh_in (fresh_svar patt_ind_gen_body) base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
free_svars base ⊆ free_svars ?ϕ₂
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
free_svars base ⊆ free_svars patt_ind_gen_body
solve_free_svars_inclusion 5.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
eval ρ base
∪ app_ext
(eval
(update_svar_val (fresh_svar patt_ind_gen_body)
A ρ) step) A =
eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
eval ρ base ∪ app_ext (eval ρ step) A =
eval ρ base ∪ app_ext (eval ρ step) A
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
free_svars step ⊆ free_svars ?ϕ₂
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
free_svars step ⊆ free_svars patt_ind_gen_body
solve_free_svars_inclusion 5.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M A: propset M
eval ρ base ∪ app_ext (eval ρ step) A =
eval ρ base ∪ app_ext (eval ρ step) A
reflexivity.Qed.Definitionis_witnessing_sequence_old (m : Domain M) (l : list (Domain M)) :=
(last l = Some m) /\
(match l with
| [] => False
| m₀::ms => (m₀ ∈ @eval Σ M ρ base)
/\ (@Forall _
(λ (x : (Domain M) * (Domain M)),
let (old, new) := x in
new ∈
app_ext
(@eval Σ M ρ step)
{[ old ]}
)
(zip (m₀::ms) ms)
)
end).Definitionis_witnessing_sequence (m : Domain M) (l : list (Domain M)) :=
(∃lst, last l = Some lst /\ lst ∈ @eval Σ M ρ base)
/\
hd_error l = Some m
/\
((@Forall _ (uncurry (λnewold,
new ∈
app_ext
(@eval Σ M ρ step)
{[old]}
))
(zip l (tail l))
)).(* If we have a witnessing sequence x₁ x₂ ... xₙ xₙ₊₁ ... xlast and xₙ matches `base`, then xₙ xₙ₊₁ is a witnessing sequence, too. *)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m': M
is_witnessing_sequence m l
→ l !! n = Some m'
→ m' ∈ eval ρ base
→ is_witnessing_sequence m' (drop n l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m': M
is_witnessing_sequence m l
→ l !! n = Some m'
→ m' ∈ eval ρ base
→ is_witnessing_sequence m' (drop n l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
is_witnessing_sequence m' (drop n l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
∃lst : M,
last (drop n l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
head (drop n l) = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (drop n l) (tail (drop n l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
∃lst : M,
last (drop n l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
last (drop n l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
last (drop n l) = Some lst
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
Some lst = Some lst
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
last l = Some lst
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
n < length l
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
Some lst = Some lst
reflexivity.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
last l = Some lst
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
n < length l
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
last l = Some lst
apply Hlst.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
n < length l
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
n < length l
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
is_Some (l !! n)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
is_Some (Some m')
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
Some m' = Some m'
reflexivity.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
lst ∈ eval ρ base
apply Hbase.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
head (drop n l) = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (drop n l) (tail (drop n l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
head (drop n l) = Some m'
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (drop n l) (tail (drop n l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
head (drop n l) = Some m'
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
l !! n = Some m'
apply Hm'.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (drop n l) (tail (drop n l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (drop n l) (tail (drop n l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (drop n l) (drop n (tail l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(drop n (zip l (tail l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' ∈ eval ρ base
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l))
apply Hfa.}Qed.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m': M
is_witnessing_sequence m l
→ head (tail l) = Some m'
→ is_witnessing_sequence m' (tail l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m': M
is_witnessing_sequence m l
→ head (tail l) = Some m'
→ is_witnessing_sequence m' (tail l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m': M Hw: is_witnessing_sequence m l Hhead: head (tail l) = Some m'
is_witnessing_sequence m' (tail l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m': M Hw: (∃lst : M, last l = Some lst ∧ lst ∈ eval ρ base)
∧ head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
is_witnessing_sequence m' (tail l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
is_witnessing_sequence m' (tail l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
(∃lst : M,
last (tail l) = Some lst ∧ lst ∈ eval ρ base)
∧ head (tail l) = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (tail l) (tail (tail l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
∃lst : M,
last (tail l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
head (tail l) = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (tail l) (tail (tail l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
∃lst : M,
last (tail l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
last (tail l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
last (tail l) = Some lst
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
last (tail l) = Some lst
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
last l = Some lst
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
head (tail l) = Some ?m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
last l = Some lst
apply Hlst1.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
head (tail l) = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (tail l) (tail (tail l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
head (tail l) = Some m'
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (tail l) (tail (tail l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
head (tail l) = Some m'
apply Hhead.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (tail l) (tail (tail l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(tail (zip l (tail l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw: head l = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst ∈ eval ρ base Hw1: head l = Some m Hw2: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l))
apply Hw2.Qed.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M
is_witnessing_sequence m l
↔ is_witnessing_sequence_old m (reverse l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M
is_witnessing_sequence m l
↔ is_witnessing_sequence_old m (reverse l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M
uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
is_witnessing_sequence m l
↔ is_witnessing_sequence_old m (reverse l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M
uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M
∀x : M * M,
uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) x =
(let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M x₁, x₂: M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
is_witnessing_sequence m l
↔ is_witnessing_sequence_old m (reverse l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
is_witnessing_sequence m l
→ is_witnessing_sequence_old m (reverse l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
is_witnessing_sequence_old m (reverse l)
→ is_witnessing_sequence m l
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
is_witnessing_sequence m l
→ is_witnessing_sequence_old m (reverse l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last l = Some m' Hbase: m' ∈ eval ρ base Hhd: head l = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l))
is_witnessing_sequence_old m (reverse l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last [] = Some m' Hbase: m' ∈ eval ρ base Hhd: head [] = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
is_witnessing_sequence_old m (reverse [])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (x :: l) = Some m' Hbase: m' ∈ eval ρ base Hhd: head (x :: l) = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (x :: l) (tail (x :: l)))
is_witnessing_sequence_old m (reverse (x :: l))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last [] = Some m' Hbase: m' ∈ eval ρ base Hhd: head [] = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
is_witnessing_sequence_old m (reverse [])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last [] = Some m' Hbase: m' ∈ eval ρ base Hhd: None = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
is_witnessing_sequence_old m (reverse [])
inversion Hhd.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (x :: l) = Some m' Hbase: m' ∈ eval ρ base Hhd: head (x :: l) = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (x :: l) (tail (x :: l)))
is_witnessing_sequence_old m (reverse (x :: l))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (x :: l) = Some m' Hbase: m' ∈ eval ρ base Hhd: Some x = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (x :: l) (tail (x :: l)))
is_witnessing_sequence_old m (reverse (x :: l))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (x :: l) = Some m' Hbase: m' ∈ eval ρ base Hhd: Some x = Some m Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (x :: l) (tail (x :: l))) H0: x = m
is_witnessing_sequence_old m (reverse (m :: l))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) Hhd: Some m = Some m
is_witnessing_sequence_old m (reverse (m :: l))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l)))
is_witnessing_sequence_old m (reverse (m :: l))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l)))
last (reverse (m :: l)) = Some m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l)))
match reverse (m :: l) with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l)))
last (reverse (m :: l)) = Some m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l)))
last (reverse l ++ [m]) = Some m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l)))
Some m = Some m
reflexivity.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l)))
match reverse (m :: l) with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end
(* reverse (m::l) <> nil *)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) Heq: reverse (m :: l) = []
False
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: reverse (m :: l) = d :: l0
d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l0) l0)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) Heq: reverse (m :: l) = []
False
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) Heq: reverse (m :: l) = []
length (reverse (m :: l)) = length []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) Heq: reverse (m :: l) = [] H: length (reverse (m :: l)) = length []
False
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) Heq: reverse (m :: l) = []
length (reverse (m :: l)) = length []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) Heq: reverse (m :: l) = []
length [] = length []
reflexivity.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) Heq: reverse (m :: l) = [] H: length (reverse (m :: l)) = length []
False
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) Heq: reverse (m :: l) = [] H: length (m :: l) = length []
False
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) Heq: reverse (m :: l) = [] H: S (length l) = 0
False
inversion H.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: reverse (m :: l) = d :: l0
d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l0) l0)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: reverse (m :: l) = d :: l0
m' = d
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: reverse (m :: l) = d :: l0 Hm'd: m' = d
d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l0) l0)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: reverse (m :: l) = d :: l0
m' = d
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: reverse l ++ [m] = d :: l0
m' = d
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: reverse l ++ [m] = d :: l0 H: last (m :: l) = head (reverse l ++ [m])
m' = d
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: reverse l ++ [m] = d :: l0 H: Some m' = head (reverse l ++ [m])
m' = d
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: rev_append l [] ++ [m] = d :: l0 H: Some m' = head (reverse l ++ [m])
m' = d
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: rev_append l [] ++ [m] = d :: l0 H: Some m' = head (d :: l0)
m' = d
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: rev_append l [] ++ [m] = d :: l0 H: Some m' = Some d
m' = d
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: rev_append l [] ++ [m] = d :: l0 H: Some m' = Some d H1: m' = d
d = d
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hbase: d ∈ eval ρ base Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: rev_append l [] ++ [m] = d :: l0 H: Some d = Some d
d = d
reflexivity.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' ∈ eval ρ base Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: reverse (m :: l) = d :: l0 Hm'd: m' = d
d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l0) l0)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hbase: d ∈ eval ρ base Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0
d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l0) l0)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hbase: d ∈ eval ρ base Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0
d ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hbase: d ∈ eval ρ base Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l0) l0)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hbase: d ∈ eval ρ base Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0
d ∈ eval ρ base
apply Hbase.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hbase: d ∈ eval ρ base Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l0) l0)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l0) l0)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0 Heq': reverse (reverse (m :: l)) = reverse (d :: l0)
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l0) l0)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0 Heq': m :: l = reverse (d :: l0)
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l0) l0)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0 Heq': m :: l = reverse (d :: l0)
l0 = tail (d :: l0)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0 Heq': m :: l = reverse (d :: l0) Heq'': l0 = tail (d :: l0)
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l0) l0)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0 Heq': m :: l = reverse (d :: l0)
l0 = tail (d :: l0)
reflexivity.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0 Heq': m :: l = reverse (d :: l0) Heq'': l0 = tail (d :: l0)
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l0) l0)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0 Heq': m :: l = reverse (d :: l0) Heq'': l0 = tail (d :: l0)
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l0) (tail (d :: l0)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0 Heq': m :: l = reverse (d :: l0)
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l0) (tail (d :: l0)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0 Heq': m :: l = reverse (d :: l0)
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (reverse (m :: l)) (tail (reverse (m :: l))))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l)))
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (reverse (m :: l)) (tail (reverse (m :: l))))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})))
(zip (reverse (m :: l))
(tail (reverse (m :: l))))
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (reverse (m :: l)) (tail (reverse (m :: l))))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hfa: Forall
(uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})))
(zip (reverse (m :: l))
(tail (reverse (m :: l))))
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (reverse (m :: l)) (tail (reverse (m :: l))))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) d: M Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (reverse (m :: l))
(tail (reverse (m :: l))))
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (reverse (m :: l)) (tail (reverse (m :: l))))
apply Hfa.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
is_witnessing_sequence_old m (reverse l)
→ is_witnessing_sequence m l
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) H: is_witnessing_sequence_old m (reverse l)
is_witnessing_sequence m l
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) Hlast: last (reverse l) = Some m H2: match reverse l with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end
is_witnessing_sequence m l
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) Hlast: last (reverse []) = Some m H2: match reverse [] with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end
is_witnessing_sequence m []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) Hlast: last (reverse (x :: l)) = Some m H2: match reverse (x :: l) with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end
is_witnessing_sequence m (x :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) Hlast: last (reverse []) = Some m H2: match reverse [] with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end
is_witnessing_sequence m []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) Hlast: None = Some m H2: match reverse [] with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end
is_witnessing_sequence m []
inversion Hlast.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) Hlast: last (reverse (x :: l)) = Some m H2: match reverse (x :: l) with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end
is_witnessing_sequence m (x :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) Heq: reverse (x :: l) = [] Hlast: last [] = Some m H2: False
is_witnessing_sequence m (x :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Heq: reverse (x :: l) = y :: ys Hlast: last (y :: ys) = Some m H2: y ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys)
is_witnessing_sequence m (x :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) Heq: reverse (x :: l) = [] Hlast: last [] = Some m H2: False
is_witnessing_sequence m (x :: l)
inversion H2.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Heq: reverse (x :: l) = y :: ys Hlast: last (y :: ys) = Some m H2: y ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys)
is_witnessing_sequence m (x :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Heq: reverse (x :: l) = y :: ys Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys)
is_witnessing_sequence m (x :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: reverse (x :: l) = reverse (reverse (y :: ys))
is_witnessing_sequence m (x :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
is_witnessing_sequence m (x :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: reverse (x :: l) = reverse (reverse (y :: ys))
Inj eq eq reverse
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
is_witnessing_sequence m (x :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
∃lst : M,
last (x :: l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
head (x :: l) = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (x :: l) (tail (x :: l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
∃lst : M,
last (x :: l) = Some lst ∧ lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
last (x :: l) = Some y ∧ y ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
last (x :: l) = Some y
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
y ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
last (reverse (y :: ys)) = Some y
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
y ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
head (y :: ys) = Some y
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
y ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
y ∈ eval ρ base
apply Hbase.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
head (x :: l) = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (x :: l) (tail (x :: l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
head (x :: l) = Some m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (x :: l) (tail (x :: l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
head (x :: l) = Some m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
head (reverse (y :: ys)) = Some m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
last (y :: ys) = Some m
apply Hlast.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (x :: l) (tail (x :: l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
(λnewold : M, new ∈ app_ext (eval ρ step) {[old]}) =
flip
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys) Hfeq': (λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}) =
flip
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (x :: l) (tail (x :: l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
(λnewold : M, new ∈ app_ext (eval ρ step) {[old]}) =
flip
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
∀x : M,
(λold : M, x ∈ app_ext (eval ρ step) {[old]}) =
flip
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) x
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys) x0: M
(λold : M, x0 ∈ app_ext (eval ρ step) {[old]}) =
flip
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) x0
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys) x0: M
∀x : M,
(x0 ∈ app_ext (eval ρ step) {[x]}) =
flip
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) x0 x
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys) x0, x1: M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys) Hfeq': (λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}) =
flip
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (x :: l) (tail (x :: l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys) Hfeq': (λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}) =
flip
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys) Hfeq': (λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}) =
flip
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys) Hfeq': (λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}) =
flip
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x: M l: list M Feq: uncurry
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) =
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y ∈ eval ρ base Hfa: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys) Hfeq': (λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}) =
flip
(flip
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (y :: ys) (tail (y :: ys)))
apply Hfa.Qed.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M l: list M
is_witnessing_sequence m l
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
↔ is_witnessing_sequence m' (m' :: l) ∧ l ≠ []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M l: list M
is_witnessing_sequence m l
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
↔ is_witnessing_sequence m' (m' :: l) ∧ l ≠ []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M l: list M
is_witnessing_sequence m l
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
→ is_witnessing_sequence m' (m' :: l) ∧ l ≠ []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M l: list M
is_witnessing_sequence m' (m' :: l) ∧ l ≠ []
→ is_witnessing_sequence m l
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M l: list M
is_witnessing_sequence m l
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
→ is_witnessing_sequence m' (m' :: l) ∧ l ≠ []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M l: list M lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
is_witnessing_sequence m' (m' :: l) ∧ l ≠ []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M l: list M lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
is_witnessing_sequence m' (m' :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M l: list M lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
l ≠ []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M l: list M lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
l ≠ []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', lst: M Hlst: last [] = Some lst Hbase: lst ∈ eval ρ base Hhd: head [] = Some m Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail [])) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
[] ≠ []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', d: M l: list M lst: M Hlst: last (d :: l) = Some lst Hbase: lst ∈ eval ρ base Hhd: head (d :: l) = Some m Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l))) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
d :: l ≠ []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', lst: M Hlst: last [] = Some lst Hbase: lst ∈ eval ρ base Hhd: None = Some m Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail [])) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
[] ≠ []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', d: M l: list M lst: M Hlst: last (d :: l) = Some lst Hbase: lst ∈ eval ρ base Hhd: head (d :: l) = Some m Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l))) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
d :: l ≠ []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', d: M l: list M lst: M Hlst: last (d :: l) = Some lst Hbase: lst ∈ eval ρ base Hhd: head (d :: l) = Some m Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l))) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
d :: l ≠ []
discriminate.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M l: list M lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hhd: head l = Some m Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l)) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
is_witnessing_sequence m' (m' :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M l: list M lst: M Hlst: last l = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l))
∀m : M,
head l = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' (m' :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hlst: last [] = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail [])) m: M Hhd: head [] = Some m m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
is_witnessing_sequence m' [m']
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M a: M l: list M lst: M Hlst: last (a :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (a :: l) (tail (a :: l))) IHl: last l = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l))
→ ∀m : M,
head l = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: l) m: M Hhd: head (a :: l) = Some m m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
is_witnessing_sequence m' (m' :: a :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hlst: last [] = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail [])) m: M Hhd: head [] = Some m m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
is_witnessing_sequence m' [m']
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hlst: last [] = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail [])) m: M Hhd: None = Some m m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
is_witnessing_sequence m' [m']
inversion Hhd.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M a: M l: list M lst: M Hlst: last (a :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (a :: l) (tail (a :: l))) IHl: last l = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l))
→ ∀m : M,
head l = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: l) m: M Hhd: head (a :: l) = Some m m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
is_witnessing_sequence m' (m' :: a :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M a: M l: list M lst: M Hlst: last (a :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (a :: l) (tail (a :: l))) IHl: last l = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l))
→ ∀m : M,
head l = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: l) m: M Hhd: Some a = Some m m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
is_witnessing_sequence m' (m' :: a :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M a: M l: list M lst: M Hlst: last (a :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (a :: l) (tail (a :: l))) IHl: last l = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l))
→ ∀m : M,
head l = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: l) m: M Hhd: Some a = Some m m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H0: a = m
is_witnessing_sequence m' (m' :: m :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M l: list M lst, m: M Hhd: Some m = Some m Hlst: last (m :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) IHl: last l = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l))
→ ∀m : M,
head l = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
is_witnessing_sequence m' (m' :: m :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M l: list M lst, m: M Hlst: last (m :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) IHl: last l = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l))
→ ∀m : M,
head l = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
is_witnessing_sequence m' (m' :: m :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M l: list M lst, m: M Hlst: last (m :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: l) (tail (m :: l))) IHl: last l = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip l (tail l))
→ ∀m : M,
head l = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
(∃lst : M,
last (m' :: m :: l) = Some lst ∧ lst ∈ eval ρ base)
∧ head (m' :: m :: l) = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m' :: m :: l) (tail (m' :: m :: l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst, m: M Hlst: last [m] = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [m] (tail [m])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
(∃lst : M,
last [m'; m] = Some lst ∧ lst ∈ eval ρ base)
∧ head [m'; m] = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [m'; m] (tail [m'; m]))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
(∃lst : M,
last (m' :: m :: d :: l) = Some lst
∧ lst ∈ eval ρ base)
∧ head (m' :: m :: d :: l) = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m' :: m :: d :: l)
(tail (m' :: m :: d :: l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst, m: M Hlst: last [m] = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [m] (tail [m])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
(∃lst : M,
last [m'; m] = Some lst ∧ lst ∈ eval ρ base)
∧ head [m'; m] = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [m'; m] (tail [m'; m]))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst, m: M Hlst: Some m = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [m] (tail [m])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
(∃lst : M,
last [m'; m] = Some lst ∧ lst ∈ eval ρ base)
∧ head [m'; m] = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [m'; m] (tail [m'; m]))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst, m: M Hlst: Some m = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [m] (tail [m])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H0: m = lst
(∃lst0 : M,
last [m'; lst] = Some lst0 ∧ lst0 ∈ eval ρ base)
∧ head [m'; lst] = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [m'; lst] (tail [m'; lst]))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hlst: Some lst = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
(∃lst0 : M,
last [m'; lst] = Some lst0 ∧ lst0 ∈ eval ρ base)
∧ head [m'; lst] = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [m'; lst] (tail [m'; lst]))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
(∃lst0 : M,
last [m'; lst] = Some lst0 ∧ lst0 ∈ eval ρ base)
∧ head [m'; lst] = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [m'; lst] (tail [m'; lst]))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
∃lst0 : M,
last [m'; lst] = Some lst0 ∧ lst0 ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
head [m'; lst] = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [m'; lst] (tail [m'; lst]))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
∃lst0 : M,
last [m'; lst] = Some lst0 ∧ lst0 ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
last [m'; lst] = Some lst ∧ lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
Some lst = Some lst ∧ lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
Some lst = Some lst
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
lst ∈ eval ρ base
apply Hbase.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
head [m'; lst] = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [m'; lst] (tail [m'; lst]))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
Some m' = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
[(m', lst)]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
Some m' = Some m'
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
[(m', lst)]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
[(m', lst)]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
uncurry
(λnewold : M, new ∈ app_ext (eval ρ step) {[old]})
(m', lst)
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
uncurry
(λnewold : M, new ∈ app_ext (eval ρ step) {[old]})
(m', lst)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
∃re : M,
step' ∈ eval ρ step
∧ re ∈ {[lst]} ∧ m' ∈ app_interp step' re
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
step' ∈ eval ρ step
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
lst ∈ {[lst]} ∧ m' ∈ app_interp step' lst
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
lst ∈ {[lst]} ∧ m' ∈ app_interp step' lst
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
lst ∈ {[lst]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
m' ∈ app_interp step' lst
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
m' ∈ app_interp step' lst
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M lst: M Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip [] (tail []))
→ ∀m : M,
head [] = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' [m'] m', step': M Hm': m' ∈ app_interp step' lst Hstep': step' ∈ eval ρ step
True
exact I.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
(∃lst : M,
last (m' :: m :: d :: l) = Some lst
∧ lst ∈ eval ρ base)
∧ head (m' :: m :: d :: l) = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m' :: m :: d :: l)
(tail (m' :: m :: d :: l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
∃lst : M,
last (m' :: m :: d :: l) = Some lst
∧ lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
head (m' :: m :: d :: l) = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m' :: m :: d :: l)
(tail (m' :: m :: d :: l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
∃lst : M,
last (m' :: m :: d :: l) = Some lst
∧ lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
last (m' :: m :: d :: l) = Some lst
∧ lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
last (m' :: m :: d :: l) = Some lst
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
last (d :: l) = Some lst
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
last (d :: l) = Some lst
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
lst ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
lst ∈ eval ρ base
apply Hbase.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
head (m' :: m :: d :: l) = Some m'
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m' :: m :: d :: l)
(tail (m' :: m :: d :: l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
head (m' :: m :: d :: l) = Some m'
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m' :: m :: d :: l) (tail (m' :: m :: d :: l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
head (m' :: m :: d :: l) = Some m'
reflexivity.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m' :: m :: d :: l) (tail (m' :: m :: d :: l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m' :: m :: d :: l) (tail (m' :: m :: d :: l)))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m', m)
:: (m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (d :: l) (tail (d :: l)))
→ ∀m : M,
head (d :: l) = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
uncurry
(λnewold : M, new ∈ app_ext (eval ρ step) {[old]})
(m', m)
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
uncurry
(λnewold : M, new ∈ app_ext (eval ρ step) {[old]})
(m', m)
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) IHl: last (d :: l) = Some lst
→ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
uncurry
(λnewold : M, new ∈ app_ext (eval ρ step) {[old]})
(m', m)
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) IHl: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step
uncurry
(λnewold : M, new ∈ app_ext (eval ρ step) {[old]})
(m', m)
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) IHl: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step x: (M * M)%type l0: list (M * M) H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d) H2: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end H: x = (m, d) H0: l0 =
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
uncurry
(λnewold : M, new ∈ app_ext (eval ρ step) {[old]})
(m', m)
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (d :: l) = Some lst Hbase: lst ∈ eval ρ base Hwit: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) IHl: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d) H2: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
uncurry
(λnewold : M, new ∈ app_ext (eval ρ step) {[old]})
(m', m)
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (d :: l) = Some lst Hbase: lst ∈ eval ρ base IHl: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d) H2: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
uncurry
(λnewold : M, new ∈ app_ext (eval ρ step) {[old]})
(m', m)
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hlst: last (d :: l) = Some lst Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d) H2: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
uncurry
(λnewold : M, new ∈ app_ext (eval ρ step) {[old]})
(m', m)
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
uncurry
(λnewold : M, new ∈ app_ext (eval ρ step) {[old]})
(m', m)
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
uncurry
(λnewold : M, new ∈ app_ext (eval ρ step) {[old]})
(m', m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
uncurry
(λnewold : M, new ∈ app_ext (eval ρ step) {[old]})
(m', m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
∃re : M,
step' ∈ eval ρ step
∧ re ∈ {[m]} ∧ m' ∈ app_interp step' re
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
step' ∈ eval ρ step
∧ m ∈ {[m]} ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
step' ∈ eval ρ step
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
m ∈ {[m]} ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
m ∈ {[m]} ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
m ∈ {[m]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
m' ∈ app_interp step' m
apply Hm'.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
uncurry
(λnewold : M, new ∈ app_ext (eval ρ step) {[old]})
(m, d)
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
uncurry
(λnewold : M, new ∈ app_ext (eval ρ step) {[old]})
(m, d)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
uncurry
(λnewold : M, new ∈ app_ext (eval ρ step) {[old]})
(m, d)
apply H1.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m : M,
Some d = Some m
→ ∀m'step' : M,
m' ∈ app_interp step' m
→ step' ∈ eval ρ step
→ is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m'step' : M,
m' ∈ app_interp step' d
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' (m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d)
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m'step' : M,
m' ∈ app_interp step' d
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' (m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step step'', d'': M Hstep'': step'' ∈ eval ρ step Hd'': d'' ∈ {[d]} Hstep''d'': m ∈ app_interp step'' d''
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m'step' : M,
m' ∈ app_interp step' d
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' (m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step step'', d'': M Hstep'': step'' ∈ eval ρ step Hd'': d'' ∈ {[d]} Hstep''d'': m ∈ app_interp step'' d'' H: d = d''
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d'', x2) :: zip l l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m'step' : M,
m' ∈ app_interp step' d
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' (m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step step'': M Hstep'': step'' ∈ eval ρ step Hstep''d'': m ∈ app_interp step'' d Hd'': d ∈ {[d]}
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: ∀m'step' : M,
m' ∈ app_interp step' d
→ step' ∈ eval ρ step
→ is_witnessing_sequence m' (m' :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step step'': M Hstep'': step'' ∈ eval ρ step Hstep''d'': m ∈ app_interp step'' d
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: is_witnessing_sequence m (m :: d :: l) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step step'': M Hstep'': step'' ∈ eval ρ step Hstep''d'': m ∈ app_interp step'' d
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: (∃lst : M,
last (m :: d :: l) = Some lst
∧ lst ∈ eval ρ base)
∧ head (m :: d :: l) = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step step'': M Hstep'': step'' ∈ eval ρ step Hstep''d'': m ∈ app_interp step'' d
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base IHl: (∃lst : M,
last (d :: l) = Some lst ∧ lst ∈ eval ρ base)
∧ Some m = Some m
∧ Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step step'': M Hstep'': step'' ∈ eval ρ step Hstep''d'': m ∈ app_interp step'' d
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base Hforall: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step step'': M Hstep'': step'' ∈ eval ρ step Hstep''d'': m ∈ app_interp step'' d
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base Hforall: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step step'': M Hstep'': step'' ∈ eval ρ step Hstep''d'': m ∈ app_interp step'' d x: (M * M)%type l0: list (M * M) H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d) H2: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end H: x = (m, d) H0: l0 =
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M d: M l: list M lst, m: M Hbase: lst ∈ eval ρ base Hforall: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) m', step': M Hm': m' ∈ app_interp step' m Hstep': step' ∈ eval ρ step step'': M Hstep'': step'' ∈ eval ρ step Hstep''d'': m ∈ app_interp step'' d H1: uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]})
(m, d) H2: Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Forall
(uncurry
(λnewold : M,
new ∈ app_ext (eval ρ step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
apply H2.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M l: list M
is_witnessing_sequence m' (m' :: l) ∧ l ≠ []
→ is_witnessing_sequence m l
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Abort.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
→ last (x :: l) = Some m
∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M
last (x :: l) = Some m
∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
→ is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
→ last (x :: l) = Some m
∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hwit: is_witnessing_sequence_old m (x :: l) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
last (x :: l) = Some m
∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
last (x :: l) = Some m
∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
last (x :: l) = Some m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
last (x :: l) = Some m
apply Hwit1.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
last ((x :: l) ++ [m']) = Some m'
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
match (x :: l) ++ [m'] with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
last ((x :: l) ++ [m']) = Some m'
apply last_snoc.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
match (x :: l) ++ [m'] with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
x ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
x ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
x ∈ eval ρ base
apply Hwit2.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: d :: l) (d :: l)) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match (d :: l) ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ((d :: l) ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [(x, m')]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
m' ∈ app_ext (eval ρ step) {[x]}
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
m' ∈ app_ext (eval ρ step) {[x]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
True
exact I.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
m' ∈ app_ext (eval ρ step) {[x]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
∃re : M,
step' ∈ eval ρ step
∧ re ∈ {[x]} ∧ m' ∈ app_interp step' re
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
step' ∈ eval ρ step
∧ x ∈ {[x]} ∧ m' ∈ app_interp step' x
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
step' ∈ eval ρ step
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
x ∈ {[x]} ∧ m' ∈ app_interp step' x
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
step' ∈ eval ρ step
apply Hstep'.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
x ∈ {[x]} ∧ m' ∈ app_interp step' x
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
x ∈ {[x]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
m' ∈ app_interp step' x
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
x ∈ {[x]}
constructor.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
m' ∈ app_interp step' x
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: Some x = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
m' ∈ app_interp step' x
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit1: Some x = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] []) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m H0: x = m
m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [m] []) Hwit2: m ∈ eval ρ base Hwit1: Some m = Some m step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
m' ∈ app_interp step' m
apply Hm'.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: d :: l) (d :: l)) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match (d :: l) ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ((d :: l) ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: d :: l) (d :: l)) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((x, d)
:: match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: d :: l) (d :: l)) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
d ∈ app_ext (eval ρ step) {[x]}
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((x, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
d ∈ app_ext (eval ρ step) {[x]}
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((x, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m x0: (M * M)%type l0: list (M * M) H1: d ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end H: x0 = (x, d) H0: l0 =
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
d ∈ app_ext (eval ρ step) {[x]}
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x ∈ eval ρ base Hwit3: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((x, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m H1: d ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
d ∈ app_ext (eval ρ step) {[x]}
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m H1: d ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
d ∈ app_ext (eval ρ step) {[x]}
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m Hd: d ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
d ∈ app_ext (eval ρ step) {[x]}
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m Hd: d ∈ app_ext (eval ρ step) {[x]} Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
d ∈ app_ext (eval ρ step) {[x]}
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m Hd: d ∈ app_ext (eval ρ step) {[x]} Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
d ∈ app_ext (eval ρ step) {[x]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m Hd: d ∈ app_ext (eval ρ step) {[x]} Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m Hd: d ∈ app_ext (eval ρ step) {[x]} Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
d ∈ app_ext (eval ρ step) {[x]}
apply Hd.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m Hd: d ∈ app_ext (eval ρ step) {[x]} Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
∀d : M,
last [x; d] = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip ([] ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', a: M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m IHl: ∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end
∀d : M,
last (x :: d :: a :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a) :: zip (a :: l) l)
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match (a :: l) ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip ((a :: l) ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
∀d : M,
last [x; d] = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip ([] ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m D: M Hm: last [x; D] = Some m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (D, x2) :: zip ([] ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m D: M Hm: last [x; D] = Some m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [(D, m')]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m D: M Hm: Some D = Some m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [(D, m')]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m D: M Hm: Some D = Some m H0: D = m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [(m, m')]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m Hm: Some m = Some m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [(m, m')]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [(m, m')]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
m' ∈ app_ext (eval ρ step) {[m]}
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
m' ∈ app_ext (eval ρ step) {[m]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
True
exact I.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
m' ∈ app_ext (eval ρ step) {[m]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
∃re : M,
step' ∈ eval ρ step
∧ re ∈ {[m]} ∧ m' ∈ app_interp step' re
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
step' ∈ eval ρ step
∧ m ∈ {[m]} ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
step' ∈ eval ρ step
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
m ∈ {[m]} ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
step' ∈ eval ρ step
apply Hstep'.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
m ∈ {[m]} ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
m ∈ {[m]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
m ∈ {[m]}
constructor.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m
m' ∈ app_interp step' m
apply Hm'.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', a: M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m IHl: ∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end
∀d : M,
last (x :: d :: a :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a) :: zip (a :: l) l)
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match (a :: l) ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip ((a :: l) ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', a: M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m IHl: ∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a) :: zip (a :: l) l)
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match (a :: l) ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip ((a :: l) ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', a: M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m IHl: ∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a) :: zip (a :: l) l)
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a)
:: match l ++ [m'] with
| [] => []
| x2 :: l2 => (a, x2) :: zip (l ++ [m']) l2
end)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', a: M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m IHl: ∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a) :: zip (a :: l) l) x0: (M * M)%type l0: list (M * M) H1: a ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end H: x0 = (d, a) H0: l0 =
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a)
:: match l ++ [m'] with
| [] => []
| x2 :: l2 => (a, x2) :: zip (l ++ [m']) l2
end)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', a: M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m IHl: ∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a) :: zip (a :: l) l) H1: a ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a)
:: match l ++ [m'] with
| [] => []
| x2 :: l2 => (a, x2) :: zip (l ++ [m']) l2
end)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', a: M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m IHl: ∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a) :: zip (a :: l) l) H1: a ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
a ∈ app_ext (eval ρ step) {[d]}
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (a, x2) :: zip (l ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', a: M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m IHl: ∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a) :: zip (a :: l) l) H1: a ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
a ∈ app_ext (eval ρ step) {[d]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', a: M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m IHl: ∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a) :: zip (a :: l) l) H1: a ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (a, x2) :: zip (l ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', a: M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m IHl: ∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a) :: zip (a :: l) l) H1: a ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
a ∈ app_ext (eval ρ step) {[d]}
apply H1.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', a: M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m IHl: ∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a) :: zip (a :: l) l) H1: a ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (a, x2) :: zip (l ++ [m']) l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', a: M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m IHl: ∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a) :: zip (a :: l) l) H1: a ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
last (x :: a :: l) = Some m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', a: M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m IHl: ∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a) :: zip (a :: l) l) H1: a ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', a: M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m IHl: ∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (a :: l) = Some m Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a) :: zip (a :: l) l) H1: a ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
last (x :: a :: l) = Some m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', a: M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m IHl: ∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a) :: zip (a :: l) l) H1: a ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', a: M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m IHl: ∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (a :: l) = Some m Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a) :: zip (a :: l) l) H1: a ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
last (a :: l) = Some m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', a: M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m IHl: ∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a) :: zip (a :: l) l) H1: a ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m', a: M l: list M Hwit2: x ∈ eval ρ base step': M Hstep': step' ∈ eval ρ step Hm': m' ∈ app_interp step' m IHl: ∀d : M,
last (x :: d :: l) = Some m
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, a) :: zip (a :: l) l) H1: a ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
apply H2.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M
last (x :: l) = Some m
∧ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
→ is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: is_witnessing_sequence_old m' ((x :: l) ++ [m'])
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: is_witnessing_sequence_old m' ((x :: l) ++ [m'])
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: match (x :: l) ++ [m'] with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: match (x :: l) ++ [m'] with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end len: nat Heqlen: len = length l
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: match (x :: l) ++ [m'] with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end len: nat Heqlen: len = length l
length l ≤ len
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: match (x :: l) ++ [m'] with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end len: nat Heqlen: len = length l Hlen: length l ≤ len
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: match (x :: l) ++ [m'] with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end len: nat Heqlen: len = length l
length l ≤ len
lia.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: match (x :: l) ++ [m'] with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end len: nat Heqlen: len = length l Hlen: length l ≤ len
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: match (x :: l) ++ [m'] with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end len: nat Hlen: length l ≤ len
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: x ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l ≤ len
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x ∈ eval ρ base Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l ≤ len
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x ∈ eval ρ base Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l ≤ len
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x ∈ eval ρ base Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l ≤ len
last (x :: l) = Some m
∧ (x ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l))
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x ∈ eval ρ base Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l ≤ len
last (x :: l) = Some m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x ∈ eval ρ base Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l ≤ len
(x ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l))
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x ∈ eval ρ base Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l ≤ len
last (x :: l) = Some m
apply Hlast.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x ∈ eval ρ base Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l ≤ len
(x ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l))
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x ∈ eval ρ base Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l ≤ len
x ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x ∈ eval ρ base Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l ≤ len
x ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x ∈ eval ρ base Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l ≤ len
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x ∈ eval ρ base Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l ≤ len
x ∈ eval ρ base
apply Hbase.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x ∈ eval ρ base Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l ≤ len
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l ≤ len
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat
∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M
∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ 0
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ S len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M
∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ 0
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x: M l: list M Hlast: last (x :: l) = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end Hlen: length l ≤ 0
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end Hlen: length [] ≤ 0
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x, d: M l: list M Hlast: last (x :: d :: l) = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match (d :: l) ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip ((d :: l) ++ [m']) l2
end Hlen: length (d :: l) ≤ 0
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: d :: l) (d :: l))
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x, d: M l: list M Hlast: last (x :: d :: l) = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match (d :: l) ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip ((d :: l) ++ [m']) l2
end Hlen: length (d :: l) ≤ 0
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: d :: l) (d :: l))
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x, d: M l: list M Hlast: last (x :: d :: l) = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match (d :: l) ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip ((d :: l) ++ [m']) l2
end Hlen: S (length l) ≤ 0
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: d :: l) (d :: l))
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
lia.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end Hlen: length [] ≤ 0
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end Hlen: length [] ≤ 0
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
[(x, m')] Hlen: length [] ≤ 0
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
[(x, m')] Hlen: length [] ≤ 0
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
[(x, m')] Hlen: length [] ≤ 0
∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
[(x, m')] Hlen: length [] ≤ 0
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
[(x, m')] Hlen: length [] ≤ 0
True
exact I.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
[(x, m')] Hlen: length [] ≤ 0
∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
[(x, m')] Hlen: length [] ≤ 0 x0: (M * M)%type l: list (M * M) H1: m' ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] H: x0 = (x, m') H0: l = []
∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
[(x, m')] Hlen: length [] ≤ 0 H1: m' ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x: M Hlast: last [x] = Some m Hlen: length [] ≤ 0 H1: m' ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x: M Hlast: last [x] = Some m Hlen: length [] ≤ 0 H1: m' ∈ app_ext (eval ρ step) {[x]}
∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x: M Hlast: last [x] = Some m Hlen: length [] ≤ 0 step', m'': M Hstep': step' ∈ eval ρ step Hm'm'': m'' ∈ {[x]} Hstep'm'': m' ∈ app_interp step' m''
∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', x: M Hlast: last [x] = Some m Hlen: length [] ≤ 0 step', m'': M Hstep': step' ∈ eval ρ step Hm'm'': m'' ∈ {[x]} Hstep'm'': m' ∈ app_interp step' m'' H: x = m''
∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', m'': M Hlast: last [m''] = Some m Hlen: length [] ≤ 0 step': M Hstep': step' ∈ eval ρ step Hm'm'': m'' ∈ {[m'']} Hstep'm'': m' ∈ app_interp step' m''
∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', m'': M Hlast: last [m''] = Some m Hlen: length [] ≤ 0 step': M Hstep': step' ∈ eval ρ step Hstep'm'': m' ∈ app_interp step' m''
∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', m'': M Hlast: last [m''] = Some m Hlen: length [] ≤ 0 step': M Hstep': step' ∈ eval ρ step Hstep'm'': m' ∈ app_interp step' m''
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', m'': M Hlast: last [m''] = Some m Hlen: length [] ≤ 0 step': M Hstep': step' ∈ eval ρ step Hstep'm'': m' ∈ app_interp step' m''
step' ∈ eval ρ step
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', m'': M Hlast: last [m''] = Some m Hlen: length [] ≤ 0 step': M Hstep': step' ∈ eval ρ step Hstep'm'': m' ∈ app_interp step' m''
m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', m'': M Hlast: last [m''] = Some m Hlen: length [] ≤ 0 step': M Hstep': step' ∈ eval ρ step Hstep'm'': m' ∈ app_interp step' m''
m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', m'': M Hlast: Some m'' = Some m Hlen: length [] ≤ 0 step': M Hstep': step' ∈ eval ρ step Hstep'm'': m' ∈ app_interp step' m''
m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m', m'': M Hlast: Some m'' = Some m Hlen: length [] ≤ 0 step': M Hstep': step' ∈ eval ρ step Hstep'm'': m' ∈ app_interp step' m'' H0: m'' = m
m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M Hlast: Some m = Some m Hlen: length [] ≤ 0 step': M Hstep': step' ∈ eval ρ step Hstep'm'': m' ∈ app_interp step' m
m' ∈ app_interp step' m
apply Hstep'm''.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ S len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x: M l: list M Hlast: last (x :: l) = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end Hlen: length l ≤ S len
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x: M Hlast: last [x] = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end Hlen: length [] ≤ S len
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x, x': M l': list M Hlast: last (x :: x' :: l') = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match (x' :: l') ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip ((x' :: l') ++ [m']) l2
end Hlen: length (x' :: l') ≤ S len
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: x' :: l') (x' :: l'))
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x: M Hlast: last [x] = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end Hlen: length [] ≤ S len
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x: M Hlast: Some x = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end Hlen: length [] ≤ S len
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) (zip [x] [])
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x: M Hlast: Some x = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end Hlen: length [] ≤ S len H0: x = m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) (zip [m] [])
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x: M Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end Hlen: length [] ≤ S len H0: x = m
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) (zip [m] [])
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (m, x2) :: zip ([] ++ [m']) l2
end Hlen: length [] ≤ S len
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) (zip [m] [])
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
[(m, m')] Hlen: length [] ≤ S len
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) (zip [m] [])
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
[(m, m')] Hlen: length [] ≤ S len x: (M * M)%type l: list (M * M) H1: m' ∈ app_ext (eval ρ step) {[m]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] H: x = (m, m') H0: l = []
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) (zip [m] [])
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
[(m, m')] Hlen: length [] ≤ S len H1: m' ∈ app_ext (eval ρ step) {[m]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) (zip [m] [])
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hlen: length [] ≤ S len H1: m' ∈ app_ext (eval ρ step) {[m]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) (zip [m] [])
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hlen: length [] ≤ S len H1: m' ∈ app_ext (eval ρ step) {[m]}
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) (zip [m] [])
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hlen: length [] ≤ S len H1: m' ∈ app_ext (eval ρ step) {[m]}
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hlen: length [] ≤ S len H1: m' ∈ app_ext (eval ρ step) {[m]}
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hlen: length [] ≤ S len H1: m' ∈ app_ext (eval ρ step) {[m]}
∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hlen: length [] ≤ S len H1: m' ∈ app_ext (eval ρ step) {[m]}
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hlen: length [] ≤ S len H1: m' ∈ app_ext (eval ρ step) {[m]}
True
exact I.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hlen: length [] ≤ S len H1: m' ∈ app_ext (eval ρ step) {[m]}
∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hlen: length [] ≤ S len step': M Hstep': ∃re : M,
step' ∈ eval ρ step
∧ re ∈ {[m]} ∧ m' ∈ app_interp step' re
∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hlen: length [] ≤ S len step': M Hstep': ∃re : M,
step' ∈ eval ρ step
∧ re ∈ {[m]} ∧ m' ∈ app_interp step' re
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hlen: length [] ≤ S len step', m'': M Hstep': step' ∈ eval ρ step Hmm'': m'' ∈ {[m]} Hm'': m' ∈ app_interp step' m''
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hlen: length [] ≤ S len step', m'': M Hstep': step' ∈ eval ρ step Hmm'': m'' ∈ {[m]} Hm'': m' ∈ app_interp step' m''
step' ∈ eval ρ step
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hlen: length [] ≤ S len step', m'': M Hstep': step' ∈ eval ρ step Hmm'': m'' ∈ {[m]} Hm'': m' ∈ app_interp step' m''
m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hlen: length [] ≤ S len step', m'': M Hstep': step' ∈ eval ρ step Hmm'': m'' ∈ {[m]} Hm'': m' ∈ app_interp step' m''
step' ∈ eval ρ step
apply Hstep'.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hlen: length [] ≤ S len step', m'': M Hstep': step' ∈ eval ρ step Hmm'': m'' ∈ {[m]} Hm'': m' ∈ app_interp step' m''
m' ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) Hlen: length [] ≤ S len step', m'': M Hstep': step' ∈ eval ρ step Hmm'': m'' ∈ {[m]} Hm'': m' ∈ app_interp step' m'' H: m = m''
m' ∈ app_interp step' m''
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m': M len: nat m'': M IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m''
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m'') Hlen: length [] ≤ S len step': M Hstep': step' ∈ eval ρ step Hmm'': m'' ∈ {[m'']} Hm'': m' ∈ app_interp step' m''
m' ∈ app_interp step' m''
apply Hm''.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x, x': M l': list M Hlast: last (x :: x' :: l') = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match (x' :: l') ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip ((x' :: l') ++ [m']) l2
end Hlen: length (x' :: l') ≤ S len
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: x' :: l') (x' :: l'))
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
(zip (x :: l) l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x, x': M l': list M Hlast: last (x :: x' :: l') = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((x, x')
:: match l' ++ [m'] with
| [] => []
| x2 :: l2 =>
(x', x2) :: zip (l' ++ [m']) l2
end) Hlen: length (x' :: l') ≤ S len
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: x' :: l') (x' :: l'))
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (x, x2) :: zip l l2
end
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x, x': M l': list M Hlast: last (x :: x' :: l') = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((x, x')
:: match l' ++ [m'] with
| [] => []
| x2 :: l2 =>
(x', x2) :: zip (l' ++ [m']) l2
end) Hlen: length (x' :: l') ≤ S len
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: x' :: l') (x' :: l'))
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (x, x2) :: zip l l2
end
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x, x': M l': list M Hlast: last (x' :: l') = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((x, x')
:: match l' ++ [m'] with
| [] => []
| x2 :: l2 =>
(x', x2) :: zip (l' ++ [m']) l2
end) Hlen: length (x' :: l') ≤ S len
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: x' :: l') (x' :: l'))
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (x, x2) :: zip l l2
end
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x, x': M l': list M Hlast: last (x' :: l') = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((x, x')
:: match l' ++ [m'] with
| [] => []
| x2 :: l2 =>
(x', x2) :: zip (l' ++ [m']) l2
end) Hlen: length (x' :: l') ≤ S len x0: (M * M)%type l: list (M * M) H1: x' ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end H: x0 = (x, x') H0: l =
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: x' :: l') (x' :: l'))
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (x, x2) :: zip l l2
end
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x, x': M l': list M Hlast: last (x' :: l') = Some m Hall: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((x, x')
:: match l' ++ [m'] with
| [] => []
| x2 :: l2 =>
(x', x2) :: zip (l' ++ [m']) l2
end) Hlen: length (x' :: l') ≤ S len H1: x' ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: x' :: l') (x' :: l'))
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat IHlen: ∀ (x : M) (l : list M),
last (x :: l) = Some m
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new ∈ app_ext (eval ρ step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
→ length l ≤ len
→ Forall
(λx0 : M * M,
let (old, new) := x0 in
new
∈ app_ext (eval ρ step) {[old]})
match l with
| [] => []
| x2 :: l2 => (x, x2) :: zip l l2
end
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x, x': M l': list M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') ≤ S len H1: x' ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: x' :: l') (x' :: l'))
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat x': M l': list M IHlen: length l' ≤ len
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x: M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') ≤ S len H1: x' ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (x :: x' :: l') (x' :: l'))
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat x': M l': list M IHlen: length l' ≤ len
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x: M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') ≤ S len H1: x' ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((x, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat x': M l': list M IHlen: length l' ≤ len
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x: M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') ≤ S len H1: x' ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
(x' ∈ app_ext (eval ρ step) {[x]}
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end)
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat x': M l': list M IHlen: length l' ≤ len
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x: M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') ≤ S len H1: x' ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
x' ∈ app_ext (eval ρ step) {[x]}
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat x': M l': list M IHlen: length l' ≤ len
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x: M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') ≤ S len H1: x' ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
x' ∈ app_ext (eval ρ step) {[x]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat x': M l': list M IHlen: length l' ≤ len
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x: M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') ≤ S len H1: x' ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat x': M l': list M IHlen: length l' ≤ len
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x: M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') ≤ S len H1: x' ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
x' ∈ app_ext (eval ρ step) {[x]}
apply H1.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat x': M l': list M IHlen: length l' ≤ len
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x: M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') ≤ S len H1: x' ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m' ∈ app_interp step' m)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat x': M l': list M IHlen: length l' ≤ len
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x: M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') ≤ S len H1: x' ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
length l' ≤ len
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, m': M len: nat x': M l': list M IHlen: length l' ≤ len
→ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m) x: M Hlast: last (x' :: l') = Some m Hlen: S (length l') ≤ S len H1: x' ∈ app_ext (eval ρ step) {[x]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
length l' ≤ len
lia.Qed.Definitionwitnessed_elements_old : propset (Domain M) :=
PropSet (λm, ∃l, is_witnessing_sequence_old m l).
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
F witnessed_elements_old ⊆ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
F witnessed_elements_old ⊆ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
∀x : M,
x ∈ F witnessed_elements_old
→ x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M Hx: x ∈ F witnessed_elements_old
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M Hx: x
∈ Fassoc ρ
(svar_open 0 (fresh_svar patt_ind_gen_body)
patt_ind_gen_body)
(fresh_svar patt_ind_gen_body)
witnessed_elements_old
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M Hx: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
patt_ind_gen_body)
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M Hx: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(bsvar_subst patt_ind_gen_body
(patt_free_svar
(fresh_svar patt_ind_gen_body)) 0)
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M Hx: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
((bsvar_subst (nest_mu base)
(patt_free_svar
(fresh_svar patt_ind_gen_body)) 0 --->
⊥) --->
bsvar_subst (nest_mu step)
(patt_free_svar
(fresh_svar patt_ind_gen_body)) 0 $
patt_free_svar
(fresh_svar patt_ind_gen_body))
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M Hx: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(bsvar_subst (nest_mu base)
(patt_free_svar
(fresh_svar patt_ind_gen_body)) 0)
∪ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(bsvar_subst (nest_mu step)
(patt_free_svar
(fresh_svar patt_ind_gen_body)) 0 $
patt_free_svar
(fresh_svar patt_ind_gen_body))
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M Hx: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
∪ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(bsvar_subst (nest_mu step)
(patt_free_svar
(fresh_svar patt_ind_gen_body)) 0 $
patt_free_svar
(fresh_svar patt_ind_gen_body))
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M Hx: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
∪ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step) $
patt_free_svar
(fresh_svar patt_ind_gen_body))
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step) $
patt_free_svar (fresh_svar patt_ind_gen_body))
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
x
∈ {[ m | ∃l : list M, is_witnessing_sequence_old m l ]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
is_witnessing_sequence_old x [x]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
last [x] = Some x
∧ x ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [x] [])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
Some x = Some x
∧ x ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
Some x = Some x
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
x ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
Some x = Some x
reflexivity.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
x ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
x ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
constructor.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
x ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval ρ
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
x ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval ρ
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
x ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval ρ
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu base))
x ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval ρ
(bsvar_subst (nest_mu base)
(patt_free_svar
(fresh_svar patt_ind_gen_body)) 0)
x ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x ∈ eval ρ base
x ∈ eval ρ base
auto.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step) $
patt_free_svar (fresh_svar patt_ind_gen_body))
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step) $
patt_free_svar (fresh_svar patt_ind_gen_body))
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ app_ext
(eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step)))
(eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(patt_free_svar
(fresh_svar patt_ind_gen_body)))
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ app_ext
(eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step)))
(svar_valuation
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(fresh_svar patt_ind_gen_body))
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ app_ext
(eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step))) witnessed_elements_old
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ {[ e | ∃lere : M,
le
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0
(fresh_svar patt_ind_gen_body)
(nest_mu step))
∧ re ∈ witnessed_elements_old
∧ e ∈ app_interp le re ]}
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M H1: step'
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step)) H2: m ∈ witnessed_elements_old Happ: x ∈ app_interp step' m
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M H1: step'
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step)) H2: m
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l ]} Happ: x ∈ app_interp step' m
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M H1: step'
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step)) l: list M Hl: is_witnessing_sequence_old m l Happ: x ∈ app_interp step' m
x ∈ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M H1: step'
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step)) l: list M Hl: is_witnessing_sequence_old m l Happ: x ∈ app_interp step' m
x
∈ {[ m | ∃l : list M, is_witnessing_sequence_old m l ]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M H1: step'
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step)) l: list M Hl: is_witnessing_sequence_old m l Happ: x ∈ app_interp step' m
is_witnessing_sequence_old x (l ++ [x])
(* `l` is not empty *)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M H1: step'
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step)) l: list M Heql: l = [] Hl: is_witnessing_sequence_old m [] Happ: x ∈ app_interp step' m
is_witnessing_sequence_old x ([] ++ [x])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M H1: step'
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step)) l: list M m₀: M l': list M Heql: l = m₀ :: l' Hl: is_witnessing_sequence_old m (m₀ :: l') Happ: x ∈ app_interp step' m
is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M H1: step'
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step)) l: list M Heql: l = [] Hl: is_witnessing_sequence_old m [] Happ: x ∈ app_interp step' m
is_witnessing_sequence_old x ([] ++ [x])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M H1: step'
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step)) l: list M Heql: l = [] Hl: is_witnessing_sequence_old m [] Happ: x ∈ app_interp step' m
is_witnessing_sequence_old x ([] ++ [x])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M H1: step'
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step)) l: list M Heql: l = [] H: last [] = Some m H0: False Happ: x ∈ app_interp step' m
is_witnessing_sequence_old x ([] ++ [x])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M H1: step'
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step)) l: list M Heql: l = [] H: None = Some m H0: False Happ: x ∈ app_interp step' m
is_witnessing_sequence_old x ([] ++ [x])
inversion H.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M H1: step'
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(svar_open 0 (fresh_svar patt_ind_gen_body)
(nest_mu step)) l: list M m₀: M l': list M Heql: l = m₀ :: l' Hl: is_witnessing_sequence_old m (m₀ :: l') Happ: x ∈ app_interp step' m
is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M H1: step'
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ)
(bsvar_subst (nest_mu step)
(patt_free_svar
(fresh_svar patt_ind_gen_body)) 0) l: list M m₀: M l': list M Heql: l = m₀ :: l' Hl: is_witnessing_sequence_old m (m₀ :: l') Happ: x ∈ app_interp step' m
is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M l: list M m₀: M l': list M Heql: l = m₀ :: l' Hl: is_witnessing_sequence_old m (m₀ :: l') Happ: x ∈ app_interp step' m H1: step'
∈ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old ρ) step
is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M l: list M m₀: M l': list M Heql: l = m₀ :: l' Hl: is_witnessing_sequence_old m (m₀ :: l') Happ: x ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M l: list M m₀: M l': list M Heql: l = m₀ :: l' Hl: is_witnessing_sequence_old m (m₀ :: l') Happ: x ∈ app_interp step' m H1: step' ∈ eval ρ step
is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M l: list M m₀: M l': list M Heql: l = m₀ :: l' Hl: is_witnessing_sequence_old m (m₀ :: l') Happ: x ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M l: list M m₀: M l': list M Heql: l = m₀ :: l' Hl: is_witnessing_sequence_old m (m₀ :: l') Happ: x ∈ app_interp step' m
free_svars step ⊆ free_svars ?ϕ₂
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M l: list M m₀: M l': list M Heql: l = m₀ :: l' Hl: is_witnessing_sequence_old m (m₀ :: l') Happ: x ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M l: list M m₀: M l': list M Heql: l = m₀ :: l' Hl: is_witnessing_sequence_old m (m₀ :: l') Happ: x ∈ app_interp step' m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M l: list M m₀: M l': list M Heql: l = m₀ :: l' Hl: is_witnessing_sequence_old m (m₀ :: l') Happ: x ∈ app_interp step' m
free_svars step ⊆ free_svars patt_ind_gen_body
solve_free_svars_inclusion 2.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M l: list M m₀: M l': list M Heql: l = m₀ :: l' Hl: is_witnessing_sequence_old m (m₀ :: l') Happ: x ∈ app_interp step' m H1: step' ∈ eval ρ step
is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M l: list M m₀: M l': list M Heql: l = m₀ :: l' Hl: is_witnessing_sequence_old m (m₀ :: l') Happ: x ∈ app_interp step' m H1: step' ∈ eval ρ step P: is_witnessing_sequence_old ?m (?x :: ?l)
∧ (∃step'0 : M,
step'0 ∈ eval ρ step
∧ ?m' ∈ app_interp step'0 ?m)
↔ last (?x :: ?l) = Some ?m
∧ is_witnessing_sequence_old
?m' ((?x :: ?l) ++ [?m'])
is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M l: list M m₀: M l': list M Heql: l = m₀ :: l' Hl: is_witnessing_sequence_old m (m₀ :: l') Happ: x ∈ app_interp step' m H1: step' ∈ eval ρ step P: is_witnessing_sequence_old ?m (?x :: ?l)
∧ (∃step'0 : M,
step'0 ∈ eval ρ step
∧ ?m' ∈ app_interp step'0 ?m)
→ last (?x :: ?l) = Some ?m
∧ is_witnessing_sequence_old
?m' ((?x :: ?l) ++ [?m'])
is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x, step', m: M l: list M m₀: M l': list M Heql: l = m₀ :: l' Hl: is_witnessing_sequence_old m (m₀ :: l') Happ: x ∈ app_interp step' m H1: step' ∈ eval ρ step P: last (m₀ :: l') = Some m
∧ is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
is_witnessing_sequence_old x ((m₀ :: l') ++ [x])
apply P.Qed.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
eval ρ patt_ind_gen ⊆ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
eval ρ patt_ind_gen ⊆ witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
well_formed_positive (mu , patt_ind_gen_body)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
letSfix := eval ρ patt_ind_gen in F Sfix = Sfix
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
letSfix := eval ρ patt_ind_gen in F Sfix = Sfix
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
well_formed_positive (mu , patt_ind_gen_body)
apply patt_ind_gen_wfp.Qed.Definitionwitnessed_elements_old_of_max_lenlen : propset (Domain M) :=
PropSet (λm, ∃l, is_witnessing_sequence_old m l /\ length l <= len).
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat
witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat
witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M
m ∈ witnessed_elements_old_of_max_len 1
→ m ∈ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M
m ∈ witnessed_elements_old_of_max_len 1
→ m ∈ F (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M
m ∈ witnessed_elements_old_of_max_len 1
→ m ∈ F (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M H: m ∈ witnessed_elements_old_of_max_len 1
m ∈ F (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M H: m ∈ witnessed_elements_old_of_max_len 1
m ∈ F (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M H: m ∈ witnessed_elements_old_of_max_len 1
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Hwit: is_witnessing_sequence_old m l Hlen: length l ≤ 1
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Hwit: is_witnessing_sequence_old m l Hlen: length l ≤ 1
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M Hlast: last l = Some m Hm: match l with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end Hlen: length l ≤ 1
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M Hlast: last [] = Some m Hm: False Hlen: length [] ≤ 1
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, d: M l: list M Hlast: last (d :: l) = Some m Hm: d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l) l) Hlen: length (d :: l) ≤ 1
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M Hlast: last [] = Some m Hm: False Hlen: length [] ≤ 1
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M Hlast: None = Some m Hm: False Hlen: length [] ≤ 1
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
inversion Hlast.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, d: M l: list M Hlast: last (d :: l) = Some m Hm: d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l) l) Hlen: length (d :: l) ≤ 1
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, d: M Hlast: last [d] = Some m Hm: d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d] []) Hlen: length [d] ≤ 1
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, d, d0: M l: list M Hlast: last (d :: d0 :: l) = Some m Hm: d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: d0 :: l) (d0 :: l)) Hlen: length (d :: d0 :: l) ≤ 1
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, d, d0: M l: list M Hlast: last (d :: d0 :: l) = Some m Hm: d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: d0 :: l) (d0 :: l)) Hlen: length (d :: d0 :: l) ≤ 1
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, d, d0: M l: list M Hlast: last (d :: d0 :: l) = Some m Hm: d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: d0 :: l) (d0 :: l)) Hlen: S (S (length l)) ≤ 1
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
lia.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, d: M Hlast: last [d] = Some m Hm: d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d] []) Hlen: length [d] ≤ 1
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, d: M Hlast: Some d = Some m Hm: d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d] []) Hlen: length [d] ≤ 1
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, d: M Hlast: Some d = Some m Hm: d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d] []) Hlen: length [d] ≤ 1 H0: d = m
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m, d: M Hm: d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d] []) Hlen: length [d] ≤ 1 H0: d = m
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M Hlen: length [m] ≤ 1 Hm: m ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [m] [])
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M Hlen: length [m] ≤ 1 Hm: m ∈ eval ρ base
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M Hlen: length [m] ≤ 1 Hm: m ∈ eval ρ base
m ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M Hlen: length [m] ≤ 1 Hm: m ∈ eval ρ base
m ∈ eval ρ base
apply Hm.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen
witnessed_elements_old_of_max_len (S (S len))
⊆ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen
witnessed_elements_old_of_max_len (S (S len))
⊆ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m: M
m ∈ witnessed_elements_old_of_max_len (S (S len))
→ m ∈ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m: M
m ∈ witnessed_elements_old_of_max_len (S (S len))
→ m ∈ F (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m: M
m ∈ witnessed_elements_old_of_max_len (S (S len))
→ m ∈ F (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m: M H: m ∈ witnessed_elements_old_of_max_len (S (S len))
m ∈ F (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m: M l: list M Hwit: is_witnessing_sequence_old m l Hlen: length l ≤ S (S len)
m ∈ F (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m: M l: list M Hwit: is_witnessing_sequence_old m l Hlen: length l ≤ S (S len)
m ∈ F (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m: M l: list M Hwit: is_witnessing_sequence_old m l Hlen: length l ≤ S (S len)
m ∈ F (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m: M l: list M Hwit: is_witnessing_sequence_old m l Hlen: length l ≤ S (S len)
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m: M l: list M Hwit: is_witnessing_sequence_old m l Hlen: length l ≤ S (S len) Hwit': is_witnessing_sequence_old m l
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m: M l: list M Hwit: is_witnessing_sequence_old m l Hlen: length l ≤ S (S len) Hwit': is_witnessing_sequence_old m l
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m: M l: list M Hlast: last l = Some m Hl: match l with
| [] => False
| m₀ :: ms =>
m₀ ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (m₀ :: ms) ms)
end Hlen: length l ≤ S (S len) Hwit': is_witnessing_sequence_old m l
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m: M Hlast: last [] = Some m Hl: False Hlen: length [] ≤ S (S len) Hwit': is_witnessing_sequence_old m []
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M l: list M Hlast: last (d :: l) = Some m Hl: d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l) l) Hlen: length (d :: l) ≤ S (S len) Hwit': is_witnessing_sequence_old m (d :: l)
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m: M Hlast: last [] = Some m Hl: False Hlen: length [] ≤ S (S len) Hwit': is_witnessing_sequence_old m []
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
contradiction.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M l: list M Hlast: last (d :: l) = Some m Hl: d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l) l) Hlen: length (d :: l) ≤ S (S len) Hwit': is_witnessing_sequence_old m (d :: l)
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M l: list M Hlast: last (d :: l) = Some m Hl: d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l) l) Hlen: S (length l) ≤ S (S len) Hwit': is_witnessing_sequence_old m (d :: l)
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M l: list M Hlast: last (d :: l) = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: l) l) Hlen: S (length l) ≤ S (S len) Hwit': is_witnessing_sequence_old m (d :: l)
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: last [d] = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d] []) Hlen: S (length []) ≤ S (S len) Hwit': is_witnessing_sequence_old m [d]
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0: M l: list M Hlast: last (d :: d0 :: l) = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: d0 :: l) (d0 :: l)) Hlen: S (length (d0 :: l)) ≤ S (S len) Hwit': is_witnessing_sequence_old m (d :: d0 :: l)
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: last [d] = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d] []) Hlen: S (length []) ≤ S (S len) Hwit': is_witnessing_sequence_old m [d]
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some d = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d] []) Hlen: S (length []) ≤ S (S len) Hwit': is_witnessing_sequence_old m [d]
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some d = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d] []) Hlen: S (length []) ≤ S (S len) Hwit': is_witnessing_sequence_old m [d] H0: d = m
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d] []) Hlen: S (length []) ≤ S (S len) Hwit': is_witnessing_sequence_old m [d] H0: d = m
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m: M Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [m] []) Hd: m ∈ eval ρ base Hlen: S (length []) ≤ S (S len) Hwit': is_witnessing_sequence_old m [m]
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m: M Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [m] []) Hd: m ∈ eval ρ base Hlen: S (length []) ≤ S (S len) Hwit': is_witnessing_sequence_old m [m]
m ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m: M Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [m] []) Hd: m ∈ eval ρ base Hlen: S (length []) ≤ S (S len) Hwit': is_witnessing_sequence_old m [m]
m ∈ eval ρ base
apply Hd.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0: M l: list M Hlast: last (d :: d0 :: l) = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: d0 :: l) (d0 :: l)) Hlen: S (length (d0 :: l)) ≤ S (S len) Hwit': is_witnessing_sequence_old m (d :: d0 :: l)
m
∈ eval ρ base
∪ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0: M l: list M Hlast: last (d :: d0 :: l) = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: d0 :: l) (d0 :: l)) Hlen: S (length (d0 :: l)) ≤ S (S len) Hwit': is_witnessing_sequence_old m (d :: d0 :: l)
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0: M l: list M Hlast: last (d :: d0 :: l) = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: d0 :: l) (d0 :: l)) Hlen: S (length (d0 :: l)) ≤ S (S len) Hwit': is_witnessing_sequence_old m (d :: d0 :: l)
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0: M l: list M Hlast: last (d :: d0 :: l) = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: d0 :: l) (d0 :: l)) Hlen: S (length (d0 :: l)) ≤ S (S len) Hwit': is_witnessing_sequence_old m (d :: d0 :: l) P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
((x :: l) ++ [m'])
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0: M Hlast: last [d; d0] = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d; d0] [d0]) Hlen: S (length [d0]) ≤ S (S len) Hwit': is_witnessing_sequence_old m [d; d0] P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
((x :: l) ++ [m'])
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (d :: d0 :: x' :: l') = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: d0 :: x' :: l') (d0 :: x' :: l')) Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
((x :: l) ++ [m'])
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0: M Hlast: last [d; d0] = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d; d0] [d0]) Hlen: S (length [d0]) ≤ S (S len) Hwit': is_witnessing_sequence_old m [d; d0] P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
((x :: l) ++ [m'])
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0: M Hlast: Some d0 = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d; d0] [d0]) Hlen: S (length [d0]) ≤ S (S len) Hwit': is_witnessing_sequence_old m [d; d0] P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
((x :: l) ++ [m'])
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0: M Hlast: Some d0 = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d; d0] [d0]) Hlen: S (length [d0]) ≤ S (S len) Hwit': is_witnessing_sequence_old m [d; d0] P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
((x :: l) ++ [m']) H0: d0 = m
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d; m] [m]) P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
((x :: l) ++ [m'])
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d; m] [m]) P: is_witnessing_sequence_old d [d]
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m ∈ app_interp step' d)
↔ last [d] = Some d
∧ is_witnessing_sequence_old m ([d] ++ [m])
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d; m] [m]) P: last [d] = Some d
∧ is_witnessing_sequence_old m ([d] ++ [m])
→ is_witnessing_sequence_old d [d]
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' d)
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d; m] [m]) P: Some d = Some d
∧ is_witnessing_sequence_old m [d; m]
→ is_witnessing_sequence_old d [d]
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' d)
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
[(d, m)] P: Some d = Some d
∧ is_witnessing_sequence_old m [d; m]
→ is_witnessing_sequence_old d [d]
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' d)
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
[(d, m)] P: Some d = Some d
∧ is_witnessing_sequence_old m [d; m]
→ is_witnessing_sequence_old d [d]
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' d) x: (M * M)%type l: list (M * M) H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] H: x = (d, m) H0: l = []
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
[(d, m)] P: Some d = Some d
∧ is_witnessing_sequence_old m [d; m]
→ is_witnessing_sequence_old d [d]
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' d) H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) P: Some d = Some d
∧ is_witnessing_sequence_old m [d; m]
→ is_witnessing_sequence_old d [d]
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' d) H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) P: Some d = Some d
∧ is_witnessing_sequence_old m [d; m]
→ is_witnessing_sequence_old d [d]
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' d) H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
Some d = Some d
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) P: Some d = Some d
∧ is_witnessing_sequence_old m [d; m]
→ is_witnessing_sequence_old d [d]
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' d) H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) P: Some d = Some d
∧ is_witnessing_sequence_old m [d; m]
→ is_witnessing_sequence_old d [d]
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' d) H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) []
Some d = Some d
reflexivity.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) P: Some d = Some d
∧ is_witnessing_sequence_old m [d; m]
→ is_witnessing_sequence_old d [d]
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' d) H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) P: is_witnessing_sequence_old d [d]
∧ (∃step' : M,
step' ∈ eval ρ step ∧ m ∈ app_interp step' d) H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step ∧ m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step ∧ m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
∃re : M,
step' ∈ eval ρ step
∧ re ∈ eval ρ patt_ind_gen ∧ m ∈ app_interp step' re
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step ∧ m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
step' ∈ eval ρ step
∧ d ∈ eval ρ patt_ind_gen ∧ m ∈ app_interp step' d
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
step' ∈ eval ρ step
∧ d ∈ eval ρ patt_ind_gen ∧ m ∈ app_interp step' d
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
step' ∈ eval ρ step
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
d ∈ eval ρ patt_ind_gen ∧ m ∈ app_interp step' d
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
step' ∈ eval ρ step
apply Hstep'.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
d ∈ eval ρ patt_ind_gen ∧ m ∈ app_interp step' d
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
d ∈ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
m ∈ app_interp step' d
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
d ∈ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
d ∈ witnessed_elements_old_of_max_len (S len)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
d
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
is_witnessing_sequence_old d [d] ∧ length [d] ≤ S len
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
is_witnessing_sequence_old d [d]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
length [d] ≤ S len
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
length [d] ≤ S len
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
1 ≤ S len
lia.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
is_witnessing_sequence_old d [d]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
is_witnessing_sequence_old d [d]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
is_witnessing_sequence_old d [d]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
last [d] = Some d
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d] [])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
last [d] = Some d
reflexivity.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
d ∈ eval ρ base
∧ Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d] [])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
d ∈ eval ρ base
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip [d] [])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
d ∈ eval ρ base
apply Hd.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) (zip [d] [])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
True
exact I.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) ≤ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' d H1: m ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]}) [] Hsomed: Some d = Some d
m ∈ app_interp step' d
apply Hm.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (d :: d0 :: x' :: l') = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: d0 :: x' :: l') (d0 :: x' :: l')) Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
((x :: l) ++ [m'])
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (d :: d0 :: x' :: l') = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: d0 :: x' :: l') (d0 :: x' :: l')) Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m'])
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
(zip (d :: d0 :: x' :: l') (d0 :: x' :: l')) Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m'])
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, d0)
:: (d0, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end) Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m'])
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, d0)
:: (d0, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end) Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) x: (M * M)%type l: list (M * M) H1: d0 ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d0, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end) H: x = (d, d0) H0: l =
(d0, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hl: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d, d0)
:: (d0, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end) Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d0, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end)
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d0, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end)
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d0, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end) x: (M * M)%type l: list (M * M) H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end H: x = (d0, x') H0: l =
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H2: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
((d0, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end) H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= rev (d0 :: x' :: l') !! 1: option M
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Htot: rev (d0 :: x' :: l') !! 1 =
Some (rev (d0 :: x' :: l') !!! 1)
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Htot: rev (d0 :: x' :: l') !! 1 =
Some (rev (d0 :: x' :: l') !!! 1)
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Inhabited M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
1 < length (rev (d0 :: x' :: l'))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Inhabited M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
M
exact d0.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Htot: rev (d0 :: x' :: l') !! 1 =
Some (rev (d0 :: x' :: l') !!! 1)
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
1 < length (rev (d0 :: x' :: l'))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
1 < length (rev (d0 :: x' :: l'))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
1 < length ((rev l' ++ [x']) ++ [d0])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
1 < length (rev l' ++ [x']) + length [d0]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
1 < length (rev l') + length [x'] + length [d0]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
1 < length (rev l') + 1 + 1
lia.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Htot: rev (d0 :: x' :: l') !! 1 =
Some (rev (d0 :: x' :: l') !!! 1)
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
⊆ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M mprev: M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ witnessed_elements_old_of_max_len (S len)
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: ∀ (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m' ∈ app_interp step' m)
↔ last (x :: l) = Some m
∧ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev)
↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
∧ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev)
↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
∧ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
d :: d0 :: x' :: l' =
d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev)
↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
∧ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' =
d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m]
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev)
↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
∧ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
d :: d0 :: x' :: l' =
d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m]
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev)
↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
∧ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev)
↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
∧ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Hx'r: [x'] = rev [x'] Hd0r: [d0] = rev [d0]
last ([d0] ++ [x'] ++ l') = Some m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev)
↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
∧ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Hx'r: [x'] = rev [x'] Hd0r: [d0] = rev [d0]
d0 :: x' :: l' = [d0] ++ [x'] ++ l'
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev)
↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
∧ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Hx'r: [x'] = rev [x'] Hd0r: [d0] = rev [d0]
last (x' :: l') = Some m
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev)
↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
∧ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Hx'r: [x'] = rev [x'] Hd0r: [d0] = rev [d0]
d0 :: x' :: l' = [d0] ++ [x'] ++ l'
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev)
↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
∧ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Hx'r: [x'] = rev [x'] Hd0r: [d0] = rev [d0]
d0 :: x' :: l' = [d0] ++ [x'] ++ l'
reflexivity.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev)
↔ last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
∧ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' =
d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m]
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
∧ is_witnessing_sequence_old m
(d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
→ is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' =
d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m]
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') Heqrev: rev (tail (rev (d0 :: x' :: l'))) = [] P: last [d] = Some mprev
∧ is_witnessing_sequence_old m (d :: [] ++ [m])
→ is_witnessing_sequence_old mprev [d]
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m]
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') d1: M l: list M Heqrev: rev (tail (rev (d0 :: x' :: l'))) = d1 :: l P: last (d :: d1 :: l) = Some mprev
∧ is_witnessing_sequence_old m
(d :: (d1 :: l) ++ [m])
→ is_witnessing_sequence_old mprev (d :: d1 :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: (d1 :: l) ++ [m]
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') Heqrev: rev (tail (rev (d0 :: x' :: l'))) = [] P: last [d] = Some mprev
∧ is_witnessing_sequence_old m (d :: [] ++ [m])
→ is_witnessing_sequence_old mprev [d]
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m]
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') Heqrev: length (rev (tail (rev (d0 :: x' :: l')))) =
0 P: last [d] = Some mprev
∧ is_witnessing_sequence_old m (d :: [] ++ [m])
→ is_witnessing_sequence_old mprev [d]
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m]
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: last [d] = Some mprev
∧ is_witnessing_sequence_old m (d :: [] ++ [m])
→ is_witnessing_sequence_old mprev [d]
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m] Heqrev: length (tail (rev (d0 :: x' :: l'))) = 0
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: last [d] = Some mprev
∧ is_witnessing_sequence_old m (d :: [] ++ [m])
→ is_witnessing_sequence_old mprev [d]
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m] Heqrev: length (rev (d0 :: x' :: l')) = 0
∨ length (rev (d0 :: x' :: l')) = 1
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: last [d] = Some mprev
∧ is_witnessing_sequence_old m (d :: [] ++ [m])
→ is_witnessing_sequence_old mprev [d]
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m] Heqrev: length (d0 :: x' :: l') = 0
∨ length (d0 :: x' :: l') = 1
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: last [d] = Some mprev
∧ is_witnessing_sequence_old m (d :: [] ++ [m])
→ is_witnessing_sequence_old mprev [d]
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m] Heqrev: S (S (length l')) = 0 ∨ S (S (length l')) = 1
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
lia.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') d1: M l: list M Heqrev: rev (tail (rev (d0 :: x' :: l'))) = d1 :: l P: last (d :: d1 :: l) = Some mprev
∧ is_witnessing_sequence_old m
(d :: (d1 :: l) ++ [m])
→ is_witnessing_sequence_old mprev (d :: d1 :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: (d1 :: l) ++ [m]
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') d1: M l: list M Heqrev: rev (tail (rev (d0 :: x' :: l'))) = d1 :: l P: last (d :: d1 :: l) = Some mprev
∧ is_witnessing_sequence_old m
(d :: (d1 :: l) ++ [m])
→ is_witnessing_sequence_old mprev (d :: d1 :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: d1 :: l ++ [m]
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base Hlen: S (length (d0 :: x' :: l')) ≤ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') d1: M l: list M Heqrev: rev (tail (rev (d0 :: x' :: l'))) = d1 :: l P: last (d :: d1 :: l) = Some mprev
∧ is_witnessing_sequence_old m
(d :: (d1 :: l) ++ [m])
→ is_witnessing_sequence_old mprev (d :: d1 :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev) H1: d0 ∈ app_ext (eval ρ step) {[d]} H3: x' ∈ app_ext (eval ρ step) {[d0]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: d1 :: l ++ [m] H0: d0 = d1 H2: x' :: l' = l ++ [m]
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l P: last (d :: d1 :: l) = Some mprev
∧ is_witnessing_sequence_old m
(d :: (d1 :: l) ++ [m])
→ is_witnessing_sequence_old mprev (d :: d1 :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev) H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Heq1: d :: d1 :: x' :: l' = d :: d1 :: l ++ [m] Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m]
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l P: last (d :: d1 :: l) = Some mprev
∧ is_witnessing_sequence_old m
(d :: (d1 :: l) ++ [m])
→ is_witnessing_sequence_old mprev (d :: d1 :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev) H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m]
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l P: last (d1 :: l) = Some mprev
∧ is_witnessing_sequence_old m
(d :: d1 :: l ++ [m])
→ is_witnessing_sequence_old mprev (d :: d1 :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev) H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m]
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] P: last (d1 :: l) = Some mprev
∧ is_witnessing_sequence_old m
(d :: d1 :: x' :: l')
→ is_witnessing_sequence_old mprev (d :: d1 :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev)
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] P: last (d1 :: l) = Some mprev
∧ is_witnessing_sequence_old m
(d :: d1 :: x' :: l')
→ is_witnessing_sequence_old mprev (d :: d1 :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev)
match l with
| [] => Some d1
| _ :: _ => last l
end = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] P: last (d1 :: l) = Some mprev
∧ is_witnessing_sequence_old m
(d :: d1 :: x' :: l')
→ is_witnessing_sequence_old mprev (d :: d1 :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev) Hm: match l with
| [] => Some d1
| _ :: _ => last l
end = Some mprev
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] P: last (d1 :: l) = Some mprev
∧ is_witnessing_sequence_old m
(d :: d1 :: x' :: l')
→ is_witnessing_sequence_old mprev (d :: d1 :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev)
match l with
| [] => Some d1
| _ :: _ => last l
end = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = l ++ [m]
match l with
| [] => Some d1
| _ :: _ => last l
end = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = [] ++ [m]
Some d1 = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) d0: M l: list M Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = (d0 :: l) ++ [m]
last (d0 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = [] ++ [m]
Some d1 = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = [m]
Some d1 = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = [m] H0: x' = m H1: l' = []
Some d1 = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat d1, m: M IHlen: rev [d1; m] !!! 1
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ rev [d1; m] !!! 1 ∈ eval ρ patt_ind_gen d: M Hlast: last [m] = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; d1; m] Hlen: S (length [d1; m]) ≤ S (S len) Htot: rev [d1; m] !! 1 = Some (rev [d1; m] !!! 1) H2: [m] = [m]
Some d1 = Some (rev [d1; m] !!! 1)
reflexivity.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) d0: M l: list M Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = (d0 :: l) ++ [m]
last (d0 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) d0: M l: list M Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = (d0 :: l) ++ [m]
last (d0 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) d0: M l: list M Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = d0 :: l ++ [m]
last (d0 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) d0: M l: list M Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = d0 :: l ++ [m] H0: x' = d0 H1: l' = l ++ [m]
last (d0 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0: M l: list M d1: M Htot: rev (d1 :: d0 :: l ++ [m]) !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: d0 :: l ++ [m]) !!! 1 H2: d0 :: l ++ [m] = d0 :: l ++ [m] Hlast: last (d0 :: l ++ [m]) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: l ++ [m]) Hlen: S (length (d1 :: d0 :: l ++ [m])) ≤ S (S len)
last (d0 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0: M l: list M d1: M Htot: rev (d1 :: d0 :: l ++ [m]) !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: d0 :: l ++ [m]) !!! 1 Hlast: last (d0 :: l ++ [m]) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: l ++ [m]) Hlen: S (length (d1 :: d0 :: l ++ [m])) ≤ S (S len)
last (d0 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0: M l: list M d1: M Htot: ((rev (l ++ [m]) ++ [d0]) ++ [d1]) !! 1 =
Some mprev Heqmprev: mprev = rev (d1 :: d0 :: l ++ [m]) !!! 1 Hlast: last (d0 :: l ++ [m]) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: l ++ [m]) Hlen: S (length (d1 :: d0 :: l ++ [m])) ≤ S (S len)
last (d0 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0: M l: list M d1: M Hcontra: l ++ [m] = [] Htot: ((rev [] ++ [d0]) ++ [d1]) !! 1 = Some mprev Heqmprev: mprev = rev [d1; d0] !!! 1 Hlast: last [d0] = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; d1; d0] Hlen: S (length [d1; d0]) ≤ S (S len)
last (d0 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0: M l: list M d1, d2: M l0: list M Hcontra: l ++ [m] = d2 :: l0 Htot: ((rev (d2 :: l0) ++ [d0]) ++ [d1]) !! 1 =
Some mprev Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len)
last (d0 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0: M l: list M d1: M Hcontra: l ++ [m] = [] Htot: ((rev [] ++ [d0]) ++ [d1]) !! 1 = Some mprev Heqmprev: mprev = rev [d1; d0] !!! 1 Hlast: last [d0] = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; d1; d0] Hlen: S (length [d1; d0]) ≤ S (S len)
last (d0 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0: M l: list M d1: M Hcontra: l ++ [m] = [] Htot: ((rev [] ++ [d0]) ++ [d1]) !! 1 = Some mprev Heqmprev: mprev = rev [d1; d0] !!! 1 Hlast: last [d0] = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; d1; d0] Hlen: S (length [d1; d0]) ≤ S (S len) Hcontra': length (l ++ [m]) = length l + length [m]
last (d0 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0: M l: list M d1: M Hcontra: l ++ [m] = [] Htot: ((rev [] ++ [d0]) ++ [d1]) !! 1 = Some mprev Heqmprev: mprev = rev [d1; d0] !!! 1 Hlast: last [d0] = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; d1; d0] Hlen: S (length [d1; d0]) ≤ S (S len) Hcontra': length [] = length l + length [m]
last (d0 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0: M l: list M d1: M Hcontra: l ++ [m] = [] Htot: ((rev [] ++ [d0]) ++ [d1]) !! 1 = Some mprev Heqmprev: mprev = rev [d1; d0] !!! 1 Hlast: last [d0] = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m [d; d1; d0] Hlen: S (length [d1; d0]) ≤ S (S len) Hcontra': 0 = length l + 1
last (d0 :: l) = Some mprev
lia.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0: M l: list M d1, d2: M l0: list M Hcontra: l ++ [m] = d2 :: l0 Htot: ((rev (d2 :: l0) ++ [d0]) ++ [d1]) !! 1 =
Some mprev Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len)
last (d0 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0: M l: list M d1, d2: M l0: list M Hcontra: l ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len) Htot: ((rev (l ++ [m]) ++ [d0]) ++ [d1]) !! 1 =
Some mprev
last (d0 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0: M l: list M d1, d2: M l0: list M Hcontra: l ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len) Htot: (((rev [m] ++ rev l) ++ [d0]) ++ [d1]) !! 1 =
Some mprev
last (d0 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0: M l: list M d1, d2: M l0: list M Hcontra: l ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len) Htot: ((rev l ++ [d0]) ++ [d1]) !! 0 = Some mprev
last (d0 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, d1, d2: M l0: list M Hcontra: [] ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len) Htot: ((rev [] ++ [d0]) ++ [d1]) !! 0 = Some mprev
last [d0] = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, d3: M l: list M d1, d2: M l0: list M Hcontra: (d3 :: l) ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len) Htot: ((rev (d3 :: l) ++ [d0]) ++ [d1]) !! 0 =
Some mprev
last (d0 :: d3 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, d1, d2: M l0: list M Hcontra: [] ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len) Htot: ((rev [] ++ [d0]) ++ [d1]) !! 0 = Some mprev
last [d0] = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, d1, d2: M l0: list M Hcontra: [] ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len) Htot: Some d0 = Some mprev
last [d0] = Some mprev
apply Htot.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, d3: M l: list M d1, d2: M l0: list M Hcontra: (d3 :: l) ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len) Htot: ((rev (d3 :: l) ++ [d0]) ++ [d1]) !! 0 =
Some mprev
last (d0 :: d3 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, d3: M l: list M d1, d2: M l0: list M Hcontra: (d3 :: l) ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len) Htot: (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0 =
Some mprev
last (d0 :: d3 :: l) = Some mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, d3: M l: list M d1, d2: M l0: list M Hcontra: (d3 :: l) ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len) Htot: (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0 =
Some mprev
last (d0 :: d3 :: l) =
(((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, d3: M l: list M d1, d2: M l0: list M Hcontra: (d3 :: l) ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len) Htot: (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0 =
Some mprev
last (d0 :: d3 :: l) =
head (((rev l ++ [d3]) ++ [d0]) ++ [d1])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, d3: M l: list M d1, d2: M l0: list M Hcontra: (d3 :: l) ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len) Htot: (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0 =
Some mprev
last (d0 :: d3 :: l) = head ((rev l ++ [d3]) ++ [d0])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, d3: M l: list M d1, d2: M l0: list M Hcontra: (d3 :: l) ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len) Htot: (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0 =
Some mprev
last (d0 :: d3 :: l) = head (rev l ++ [d3])
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, d0, d3: M l: list M d1, d2: M l0: list M Hcontra: (d3 :: l) ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d ∈ eval ρ base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) ≤ S (S len) Htot: (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0 =
Some mprev
last (d3 :: l) = head (rev l ++ [d3])
apply last_rev_head.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] P: last (d1 :: l) = Some mprev
∧ is_witnessing_sequence_old m
(d :: d1 :: x' :: l')
→ is_witnessing_sequence_old mprev (d :: d1 :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev) Hm: match l with
| [] => Some d1
| _ :: _ => last l
end = Some mprev
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] P: is_witnessing_sequence_old mprev (d :: d1 :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev) Hm: match l with
| [] => Some d1
| _ :: _ => last l
end = Some mprev
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] P: is_witnessing_sequence_old mprev (d :: d1 :: l)
∧ (∃step' : M,
step' ∈ eval ρ step
∧ m ∈ app_interp step' mprev)
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
m ∈ app_ext (eval ρ step) (eval ρ patt_ind_gen)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
∃re : M,
step' ∈ eval ρ step
∧ re ∈ eval ρ patt_ind_gen ∧ m ∈ app_interp step' re
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
step' ∈ eval ρ step
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
step' ∈ eval ρ step
apply Hstep'.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
mprev ∈ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
m ∈ app_interp step' mprev
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
m ∈ app_interp step' mprev
apply Hm.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
mprev ∈ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
is_witnessing_sequence_old mprev (d :: d1 :: l)
∧ length (d :: d1 :: l) ≤ S len
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
is_witnessing_sequence_old mprev (d :: d1 :: l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
length (d :: d1 :: l) ≤ S len
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
is_witnessing_sequence_old mprev (d :: d1 :: l)
apply Hwitmprev.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
length (d :: d1 :: l) ≤ S len
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (length (d1 :: x' :: l')) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
S (S (length l)) ≤ S len
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (S (S (length l'))) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
S (S (length l)) ≤ S len
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (S (S (length l'))) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
S (length l') ≤ len
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (S (S (length l'))) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev Hlen': S (length l') ≤ len
S (S (length l)) ≤ S len
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (S (S (length l'))) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev
S (length l') ≤ len
lia.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (S (S (length l'))) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev Hlen': S (length l') ≤ len
S (S (length l)) ≤ S len
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (S (S (length l'))) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev Hlen': S (length l') ≤ len
length l' = length l
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (S (S (length l'))) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev Hlen': S (length l') ≤ len H: length l' = length l
S (S (length l)) ≤ S len
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (S (S (length l'))) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev Hlen': S (length l') ≤ len
length l' = length l
apply (@list_len_slice _ _ _ _ _ H2).
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (S (S (length l'))) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev Hlen': S (length l') ≤ len H: length l' = length l
S (S (length l)) ≤ S len
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M len: nat mprev: M IHlen: mprev
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l
∧ length l ≤ S len ]}
→ mprev ∈ eval ρ patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d ∈ eval ρ base d1: M Hlen: S (S (S (length l'))) ≤ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' ∈ app_ext (eval ρ step) {[d1]} H1: d1 ∈ app_ext (eval ρ step) {[d]} H4: Forall
(λx : M * M,
let (old, new) := x in
new ∈ app_ext (eval ρ step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' ∈ eval ρ step Hm: m ∈ app_interp step' mprev Hlen': S (length l') ≤ len H: length l' = length l
S (S (length l')) ≤ S len
lia.Qed.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
witnessed_elements_old ⊆ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
witnessed_elements_old ⊆ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x ∈ witnessed_elements_old
x ∈ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x ∈ witnessed_elements_old
x ∈ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M H: x
∈ {[ m | ∃l : list M,
is_witnessing_sequence_old m l ]}
x ∈ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit
x ∈ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit
x ∈ witnessed_elements_old_of_max_len (length wit)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit H': x
∈ witnessed_elements_old_of_max_len (length wit)
x ∈ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit
x ∈ witnessed_elements_old_of_max_len (length wit)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit
x ∈ witnessed_elements_old_of_max_len (length wit)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit
is_witnessing_sequence_old x wit
∧ length wit ≤ length wit
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit
is_witnessing_sequence_old x wit
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit
length wit ≤ length wit
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit
length wit ≤ length wit
lia.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit H': x
∈ witnessed_elements_old_of_max_len (length wit)
x ∈ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M wit: list M Hl: wit = [] Hwit: is_witnessing_sequence_old x [] H': x ∈ witnessed_elements_old_of_max_len (length [])
x ∈ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M wit: list M y: M l': list M Hl: wit = y :: l' Hwit: is_witnessing_sequence_old x (y :: l') H': x
∈ witnessed_elements_old_of_max_len
(length (y :: l'))
x ∈ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M wit: list M Hl: wit = [] Hwit: is_witnessing_sequence_old x [] H': x ∈ witnessed_elements_old_of_max_len (length [])
x ∈ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M wit: list M Hl: wit = [] Hwit: is_witnessing_sequence_old x [] H': x ∈ witnessed_elements_old_of_max_len (length [])
x ∈ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M wit: list M Hl: wit = [] H: last [] = Some x H0: False H': x ∈ witnessed_elements_old_of_max_len (length [])
x ∈ eval ρ patt_ind_gen
contradiction.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M wit: list M y: M l': list M Hl: wit = y :: l' Hwit: is_witnessing_sequence_old x (y :: l') H': x
∈ witnessed_elements_old_of_max_len
(length (y :: l'))
x ∈ eval ρ patt_ind_gen
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M wit: list M y: M l': list M Hl: wit = y :: l' Hwit: is_witnessing_sequence_old x (y :: l') H': x
∈ witnessed_elements_old_of_max_len
(length (y :: l'))
x ∈ witnessed_elements_old_of_max_len (S ?len)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M x: M wit: list M y: M l': list M Hl: wit = y :: l' Hwit: is_witnessing_sequence_old x (y :: l') H': x
∈ witnessed_elements_old_of_max_len
(S (length l'))
x ∈ witnessed_elements_old_of_max_len (S ?len)
apply H'.Qed.Definitionwitnessed_elements : propset (Domain M) :=
PropSet (λm, ∃l, is_witnessing_sequence m l).
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
witnessed_elements_old = witnessed_elements
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
witnessed_elements_old = witnessed_elements
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
(∀x : M,
x ∈ witnessed_elements_old → x ∈ witnessed_elements)
∧ (∀x : M,
x ∈ witnessed_elements
→ x ∈ witnessed_elements_old)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M H: is_witnessing_sequence_old m l
m ∈ {[ m | ∃l : list M, is_witnessing_sequence m l ]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M H: is_witnessing_sequence m l
m
∈ {[ m | ∃l : list M, is_witnessing_sequence_old m l ]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M H: is_witnessing_sequence_old m l
m ∈ {[ m | ∃l : list M, is_witnessing_sequence m l ]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M H: is_witnessing_sequence_old m l
is_witnessing_sequence m (reverse l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M H: is_witnessing_sequence_old m l
is_witnessing_sequence_old m (reverse (reverse l))
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M H: is_witnessing_sequence_old m l
is_witnessing_sequence_old m l
exact H.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M H: is_witnessing_sequence m l
m
∈ {[ m | ∃l : list M, is_witnessing_sequence_old m l ]}
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M H: is_witnessing_sequence m l
is_witnessing_sequence_old m (reverse l)
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M m: M l: list M H: is_witnessing_sequence m l
is_witnessing_sequence m l
apply H.Qed.
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
eval ρ patt_ind_gen = witnessed_elements
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
eval ρ patt_ind_gen = witnessed_elements
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M
eval ρ patt_ind_gen = witnessed_elements_old
Σ: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model ρ: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc ρ (svar_open 0 X patt_ind_gen_body) X: propset M → propset M